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.
だから、最初の部分に何か問題があると思いますか?
start-stop-daemon --start --pidfile "$pid"
は、--make-pidfile
(-m
)が指定されていない限り、pidファイルに書き込みません。 --make-pidfile
がなければ、それを作成するために起動されるプログラム次第です。また、--make-pidfile
が機能するためには、起動されているプロセスは(フォークを介して)デーモン化できません。そのため、start-stop-daemon
は、ファイルにどのPIDを配置する必要があるかを認識できません。
使用シナリオで--pidfile "$pid"
が行う唯一のことは、プログラムがすでに実行されている場合、start-stop-daemon
がプログラムを開始しないことです。
それでもプロセスが停止しない場合、start-stop-daemon --stop
に渡されるすべての基準が一致する必要があります。意味$pid
は実行中のプロセスでなければならず、プロセスのUIDは$user
と一致する必要があり、プロセス名(arg0)は$name
と一致する必要があります。
arg [0]の値はps h -p $pid -o comm
を実行することで決定できます