Um den Befehl als Systemdienst unter Debian mit sysv init auszuführen:
Kopieren Sie das Skelettskript und passen Sie es an Ihre Bedürfnisse an, wahrscheinlich müssen Sie nur einige Variablen setzen. Ihr Skript erbt die Standardeinstellungen von /lib/init/init-d-script
Wenn etwas nicht Ihren Bedürfnissen entspricht, überschreiben Sie es in Ihrem Skript. Wenn etwas schief geht, können Sie Details im Quelltext sehen /lib/init/init-d-script
. Obligatorische Variablen sind DAEMON
y NAME
. Das Skript verwendet start-stop-daemon
um Ihren Befehl auszuführen, in START_ARGS
können Sie zusätzliche Parameter von start-stop-daemon
zu verwenden.
cp /etc/init.d/skeleton /etc/init.d/myservice
chmod +x /etc/init.d/myservice
nano /etc/init.d/myservice
/etc/init.d/myservice start
/etc/init.d/myservice stop
So lasse ich einige Python-Sachen für mein Wikimedia-Wiki laufen:
...
DESC="mediawiki articles converter"
DAEMON='/home/mss/pp/bin/nslave'
DAEMON_ARGS='--cachedir /home/mss/cache/'
NAME='nslave'
PIDFILE='/var/run/nslave.pid'
START_ARGS='--background --make-pidfile --remove-pidfile --chuid mss --chdir /home/mss/pp/bin'
export PATH="/home/mss/pp/bin:$PATH"
do_stop_cmd() {
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
$STOP_ARGS \
${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
rm -f $PIDFILE
return $RETVAL
}
Neben dem Setzen von Variablen musste ich die do_stop_cmd
weil Python die ausführbare Datei ersetzt, so dass der Dienst nicht ordnungsgemäß beendet wurde.
8 Stimmen
In meinem Fall funktioniert nohup, wenn ich Terminal durch Eingabe von
exit
. Wenn ich nur das Putty-Fenster schließe, schlägt es fehl.