Как правильно завершать скрипт, используя start-stop-daemon?
Я использую start-stop-daemon для создания сценария INIT для моего сценария. Я использую --make-pidfile, потому что мой скрипт не создает свой pid. Я могу запустить свой скрипт, используя start и pid генерирует файл с соответствующим PID. Но функция остановки не работает. Согласно руководству start-stop-daemon,
--stop Проверяет наличие указанного процесса. Если такой процесс существует, start-stop-daemon отправляет ему сигнал, заданный параметром --signal, и завершает работу с состоянием ошибки 0. Если такого процесса не существует, start-stop-daemon завершает работу с состоянием ошибки 1 (0, если - -окнодо указано). Если указан параметр --retry, то start-stop-daemon проверит, что процесс (ы) завершен.
Я не нашел никакой документации по самому --signal. Например, как указать --signal, если я хочу отправить SIGTERM.
case "$1" in
start|debug)
log_daemon_msg "Starting $DESC: $NAME"
start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE \
--exec $DAEMON || log_failure_msg " already running"
log_end_msg 0
;;
stop)
log_daemon_msg "Stopping $DESC: $NAME"
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
--exec $DAEMON
log_end_msg 0
;;
1 ответ
С --signal
Вы можете использовать числовые значения или название сигнала без SIG
часть, например --signal TERM
,
Не использовать --exec $DAEMON
при остановке, так как это не работает, если вы пытаетесь остановить демон после замены исполняемого файла в рамках обновления: исполняемый файл не соответствует запущенному процессу, поэтому он не останавливается. В качестве альтернативы, если вы настаиваете на использовании --exec
убедитесь, что остановили демон перед заменой исполняемого файла.
Если созданный pid-файл не соответствует процессу демона, то, вероятно, сам демон также переходит в фоновый режим. Если это так, то посмотрите, есть ли у демона возможность предотвратить этот фон, как start-stop-daemon
уже позаботится об этом. Если это невозможно, не используйте опцию pidfile и полагайтесь на --exec
(но см. предыдущий параграф об обновлении).