これが私の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
に記録します。
デーモンがデーモンモードで実行されていると推測すると、起動時に自身のコピーが作成されます。
これが、ps出力のSTAT列で「Sl」の「l」の部分が意味することかもしれないと思います。
私は最近python-daemonをかなり使用していますが、それがスクリプトで使用されている場合は、daemoncontextのコンストラクターでプロセスをデタッチするかどうかを指示できます。デタッチしないように指示するだけで、次のようになります。ゴールデン。
-または-
start-stop-daemonを使用せず、detach_processフラグを利用するsystemdサービスを作成するだけです。
-または-
両方を実行し、プロセスを切り離すかどうかをプロセスに伝えます。