0

重複の可能性:
Linux で Perl スクリプトをシステム デーモンとして実行するにはどうすればよいですか?

私が書いている多くのメンテナンス シェル スクリプトはデーモン化する必要があり、次のようなことを行うライブラリが必要です。

script

#!/usr/bin/...

use daemonize;

...

または

daemonize('/path/to/external/script/or/program');

その後:

./script start
./script status
./script stop

これは、init プロセスの一部ではなく、非ルートとして実行する必要があります。

Perl か Python のライブラリの方がいいと思います。

私は libslack.org の 「デーモン」を検討しましたが、それにはスクリプトを C で記述してコンパイルする必要があります。また、コマンド ライン引数を処理するコードを記述する必要もあります。もう 1 つのオプションは、「デーモン」のコンパイル済みバージョンを呼び出すことでしたが、それは面倒に思えました。私が言ったように、単純な Perl または Python ソリューションが好まれます。

4

3 に答える 3

2

Karthik T が perl の答えを出しました。むしろ、いくつかの最良の答えです。もちろん、それを行う方法はたくさんあります。もちろん、Python の場合、それを行う方法は 1 つしかないはずです。

幸いなことに、PEP 3143は Python デーモン ライブラリが何をすべきかを指定しており、python-daemon将来の 3.x バージョンで標準ライブラリに含まれる予定の参照実装が にあります。

なんらかの理由でこれがうまくいかない場合 (たとえば、IIRC では 2.6+ または 3.1+ が必要で、2.5 または 3.0 を使用している可能性があります)、PEP の最後に他のさまざまなモジュールとレシピへのリンクがあります。

于 2013-01-08T01:32:21.990 に答える
2

Proc::Daemonを調査しましたか。

Proc::Daemon - Perl プログラムをデーモン プロセスとして実行します。

あるいは、Working::Daemonがあります

Working::Daemon - スクリプトをデーモンに変換するための Perl 拡張.
また、開始、停止、ステータス、および再起動もサポートしています。

また、「Linux で Perl スクリプトをシステム デーモンとして実行するにはどうすればよいですか?」でも説明されています。

その他の参考文献: http://www.perlmonks.org/?node_id=478839 http://erwan.lemonnier.se/talks/working_daemon.pdf

于 2013-01-08T01:25:55.253 に答える
1

これは、ライブラリとのインターフェイスの方法という点では正確ではありませんが、supervisordは Web 操作で広く使用されているシステムです。それへの参照をスクリプトに含めるのではなく、デーモン化する各プログラムの構成を記述し ( one を呼び出しますserver)、実行するスクリプト、さまざまな環境変数、さらには実行するプログラムのインスタンスの数を指定します。走る。次に、次のようにコマンドを発行します。

$ supervisorctl start server
$ supervisorctl stop server

また、supervisord が管理するすべてのプロセスを開始または停止するように指示することもできます。

$ supervisorctl start all
$ supervisorctl stop all

このアプローチは、独自のコードを変更する必要がないため優れています。その結果、プログラムが書かれている言語にとらわれなくなります。これはもう 1 つのメリットです。

于 2013-01-08T01:38:41.560 に答える