私は現在Debian 10マシンで小規模サーバーとして実行しています。 aria2cをインストールしてダウンロードサービスとして使用しています。これまでは、すべてが大丈夫でしょう。私の質問は次のとおりです
- init.dスクリプトを使用してaria2cをデーモンとして起動します。
- pidファイルが作成されます。
- プロセスを確認すると、aria2cのPIDはファイルのPIDとは異なります。
誰かが理由を説明できますか? (注 - これは機能上の問題ではありません。理由を知りたいのですが、私が何か間違っているのかもしれません...)
$ cat /var/run/aria2c.pid
561
$ sudo /etc/init.d/aria2 status
...
CGroup: /system.slice/aria2.service
└─565 /usr/bin/aria2c --daemon=true --enable-rpc --conf-path=/etc/aria2.conf
$ pgrep aria2
565
$ ps ax | grep aria*
565 ? Ss 0:36 /usr/bin/aria2c --daemon=true --enable-rpc --conf-path=/etc/aria2.conf
$ cat /proc/56
56/ 565/
これが私に意味するのは、プロセス561がもう存在しないということです。しかし、なぜ私のpidファイルにこのPIDがあるのですか?
答え1
私はあなたが言及したダウンローダデーモンの経験を否定していますが...
- RCスクリプトを自分で書いていますか?
aria2c
走るとちゃんと止まりますか/etc/init.d/aria2 stop
?(つまり、遅いプロセスが残っていませんか?)
(1)が「はい」で、(2)が「いいえ」の場合、次の理由が考えられます。aria2c
本物の仕事ができる子供を産む、RCスクリプトはこれを正しく抑制していません。
多くのプログラムでは悪魔呼び出されたプログラムはサブルーチンのパターンを生成し、悪魔:
- このプログラムは子プロセスを分岐します。
- サブプロセスは作業ディレクトリを
/
。 - サブプロセスは独自の標準入力/出力/エラーをブロックします。
- 子プロセスは現在のセッションから切り離されます。
- あなたが呼び出した親プロセスは終了します。
- 子プロセスは、実際のタスクを実行するためにバックグラウンドで維持されます。
PIDファイルにキャプチャしたプロセスIDは、おそらく終了した親プロセスです。
デーモン()を停止すると、PIDファイルのプロセスIDも使用されます/etc/init.d/aria2 stop
。無効な場合(たとえば、実際のデーモンの代わりに終了した親プロセスを参照)、その結果デーモンは停止せず、手動で終了する必要があります。
aria2c
ソリューションを実行する必要はありません。--daemon
範囲、自己デーモン化を防ぐために(正しいプロセスIDをPIDファイルに保存できるように)、次のことを行う必要があります。悪魔RCスクリプトに直接参加してみてください。
PSすでにaria2c
Debian経由でRCスクリプトを実行している場合start-stop-daemon
ヘルパー、それでほとんどの作業が完了しました。しかし、あなたも提案--background
して--chdir /
選択する必要がありますstart-stop-daemon
。