Чтобы запустить команду как системную службу в Debian с sysv init:
Скопируйте скрипт-скелет и адаптируйте его под свои нужды, вероятно, все, что вам нужно сделать, это установить некоторые переменные. Ваш скрипт будет наследовать точные значения по умолчанию от /lib/init/init-d-script
, если что-то не соответствует вашим потребностям - переопределите это в вашем скрипте. Если что-то пойдет не так, вы можете увидеть детали в источнике /lib/init/init-d-script
. Обязательными переменными являются DAEMON
и NAME
. Скрипт будет использовать start-stop-daemon
для запуска вашей команды, в START_ARGS
вы можете определить дополнительные параметры start-stop-daemon
для использования.
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
Вот как я запускаю некоторые вещи на Python для моей вики-конференции Викимедиа:
...
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
}
Помимо установки vars мне пришлось переопределить do_stop_cmd
, потому что python заменяет исполняемый файл, поэтому служба не остановилась должным образом.