web-dev-qa-db-ja.com

「start-stop-daemon」が2つのプロセスを生成するのはなぜですか?

これが私のSysVinitファイルの一部です。

NAME="flask-daemon"
PIDFILE="/var/run/"$NAME".pid"
DAEMON="/home/ubuntu/flask/run.py"
DAEMON_USER=root

f_start() {
    echo -e "\nStarting : $NAME"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --exec $DAEMON
}

エラーがどこにあるべきか誰かが知っていますか?

また、この状況では、1つのプロセスのPIDのみがpidfileに書き込まれているのはひどいことです。したがって、/etc/init.d/flask-daemon stopを実行すると、ファイルに書き込まれたと見なされたPIDに関連するプロセスのみが強制終了されます。

プロセス(なぜ2つ?):

ps aux | grep run.py
root      3591  3.0  1.7 132700 17460 ?        S    19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3595  4.5  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3602  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

PIDファイル:

$ cat /var/run/flask-daemon.pid
3591

1つのプロセスだけが強制終了されました...

ps aux | grep run.py
root      3595  0.3  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3613  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

観察:>私も--startasを使用しようとしましたが、2つのプロセスも生成します。さらに悪いことに、デーモンからのPIDを除いて、他のプロセスからのPIDを/var/run/flask-daemon.pyに記録します。

3
ivanleoncz

デーモンがデーモンモードで実行されていると推測すると、起動時に自身のコピーが作成されます。

これが、ps出力のSTAT列で「Sl」の「l」の部分が意味することかもしれないと思います。

私は最近python-daemonをかなり使用していますが、それがスクリプトで使用されている場合は、daemoncontextのコンストラクターでプロセスをデタッチするかどうかを指示できます。デタッチしないように指示するだけで、次のようになります。ゴールデン。

-または-

start-stop-daemonを使用せず、detach_processフラグを利用するsystemdサービスを作成するだけです。

-または-

両方を実行し、プロセスを切り離すかどうかをプロセスに伝えます。

2
Peter Turner