web-dev-qa-db-ja.com

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.

だから、最初の部分に何か問題があると思いますか?

17
daisy

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を実行することで決定できます

22
Patrick