start-stop-daemonが期待どおりに機能しない、pidファイルが書き込まれていません


17

私は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.

だから、開始部分に何か問題があると思いますか?

回答:


22

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ます。
arg0の値は次のようにして決定できますps h -p $pid -o comm


さて、pidfileが書き込まれました。ただし、停止している部分がまだ機能していない、同じエラーメッセージ
デイジー14年

@ warl0ckはpidファイルであり、プロセスのUIDは一致してい$userますか?
パトリック14年

はい、私はスタート・ストップ・デーモン読みしようとしたのを見た/proc/pid/statread(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326名前があるべきので、python代わりに、おそらく?
デイジー14年

完了し、名前を置き換えpythonて動作しました;-P
デイジー

はい、そうです、$name一致しなければなりません。あなたがそれを渡していたことを完全に逃しました。答えを更新します。
パトリック14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.