これは私の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だけがpidファイルに書き込むことです。これにより、/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つのプロセスが作成され、最悪でした。/var/run/flask-daemon.py
デーモンプロセスのプロセスを除く他のプロセスのPIDを記録します。
答え1
デーモンはデーモンモードで実行されているため、起動時に独自のコピーを作成します。
私はこれがps出力のSTAT列の「Sl」の「l」部分が意味するものかもしれないと思います。
私は最近Python-daemonをたくさん使用していますが、スクリプトがそれを使用している場合は、デーモンコンテキストのコンストラクタからプロセスを分離するかどうかを知ることができます。そうしないと言えば金賞添化でしょう。
-または-
start-stop-daemon を使用せず、detach_process フラグを使用して systemd サービスを生成します。
-または-
プロセスを分離するには、両方を実行してプロセスに通知します。