Назад | Перейти на главную страницу

Как правильно завершить сценарий с помощью 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, если - -oknodo указано). Если указан --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
        ;;

С участием --signal вы можете использовать числовые значения или название сигнала без SIG часть, например --signal TERM.

Не использовать --exec $DAEMON при остановке, поскольку это не работает, если вы пытаетесь остановить демон после замены исполняемого файла в рамках обновления: исполняемый файл не соответствует запущенному процессу, поэтому он не останавливается. В качестве альтернативы, если вы настаиваете на использовании --exec обязательно остановите демон перед заменой исполняемого файла.

Если созданный pid-файл не соответствует процессу демона, то, вероятно, сам демон также переходит в фоновый режим. Если это так, то посмотрите, есть ли у демона возможность предотвратить эту фоновую обработку, как start-stop-daemon уже позаботится об этом. Если это невозможно, не используйте параметр pidfile и полагайтесь на --exec (но см. предыдущий абзац об обновлении).