start-stop-daemon не работает как ожидалось, pid-файл не был записан

start-stop-daemon не работает как ожидалось, pid-файл не был записан

Я пытаюсь управлять программой на основе Python (которая не отсоединяется от консоли)

#!/bin/bash

user=nobody
pid=/var/run/xx.pid
name=xx
prog=/xx.py

case $1 in
    start)
        /sbin/start-stop-daemon --start -b --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" --chuid nobody -- --daemon
        ;;
    stop)
        /sbin/start-stop-daemon --stop --oknodo --user "$user" --name "$name" --pidfile "$pid" --retry=TERM/5/KILL/1
        ;;
    restart)
        ;;
    *)
        ;;
esac

Часть запуска работает нормально. Я вижу, что скрипт запущен и работает, но часть остановки — нет. Он просто говорит:No xx found running; none killed.

Так что, полагаю, что-то не так с начальной частью?

решение1

start-stop-daemon --start --pidfile "$pid"не записывает в pid-файл, если не указано --make-pidfile( ). Без этого запуск программы должен его создать. Также для работы, запущенный процесс не может демонизировать себя (через форк), так как тогда не будет знать, какой PID он должен поместить в файл.-m--make-pidfile--make-pidfilestart-stop-daemon

Единственное, что произойдет в вашем сценарии использования, — это то, что программа не --pidfile "$pid"будет запущена, если она уже запущена.start-stop-daemon


Если процесс все еще не останавливается, все переданные критерии start-stop-daemon --stopдолжны совпадать. Значение $pidдолжно быть запущенным процессом, UID процесса должен совпадать $user, а имя процесса (arg0) должно совпадать $name.
Вы можете определить значение arg0, выполнивps h -p $pid -o comm

Связанный контент