Я пытаюсь управлять программой на основе 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-pidfile
start-stop-daemon
Единственное, что произойдет в вашем сценарии использования, — это то, что программа не --pidfile "$pid"
будет запущена, если она уже запущена.start-stop-daemon
Если процесс все еще не останавливается, все переданные критерии start-stop-daemon --stop
должны совпадать. Значение $pid
должно быть запущенным процессом, UID процесса должен совпадать $user
, а имя процесса (arg0) должно совпадать $name
.
Вы можете определить значение arg0, выполнивps h -p $pid -o comm