Ich habe eine Upstart-Konfigurationsdatei wie unten gezeigt, die unter Ubuntu 14 einwandfrei funktioniert:
#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server
start on runlevel [2345]
stop on runlevel [016]
chdir /opt/hold/data_server
respawn
post-start script
echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "data server Started" "[email protected]"
end script
post-stop script
sleep 30
end script
limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Jetzt wechseln wir zu Ubuntu 16, daher können wir nicht verwenden upstart
und es sieht so aus, als müssten wir hier verwenden systemd
. Welche Änderungen muss ich vornehmen, um Skripte darin zu schreiben systemd
?
Ich muss sicherstellen, dass bei jedem Neustart des Systems oder Beenden einer App mein systemd
Skript automatisch gestartet wird, das wiederum mein startet data server
.
Antwort1
Ihr Upstart-Skript wird sich stark ändern. Sie müssen nicht so viele Anweisungen manuell angeben, daher wird es auch viel kürzer sein.
Um einen Prozess immer beim Booten zu starten und neu zu starten, wenn er abstürzt, genügt eine einzige Zeile:
Restart=always
Ich weiß nicht, wie viele benutzerdefinierte Änderungen Sie beibehalten müssen, aber es sieht so aus, als müssten Sie mindestens die Befehle chdir
und beibehalten exec
.
Hier ist ein Beispiel für ein grundlegendes systemd-Skript für Ihre App:
[Unit]
Description=My-service
[Service]
Type=simple
WorkingDirectory=/opt/hold/data_server
ExecStart=/path/to/data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Restart=always
[Install]
WantedBy=multi-user.target
Dies hat sich beim Schreiben von benutzerdefinierten Unit-Dateien als praktische Ressource erwiesen:https://www.freedesktop.org/software/systemd/man/systemd.unit.html