3

perlプロセスのサンプルテストをsyslogにデーモン化しようとしています。

1)perlスクリプトでは、すでにローテーションログファイルにログインしていますが、ログが作成される前に問題が発生した場合に備えて、daemonizeをログに記録したいと思います。 -e /home/users/me/log/log.log /home/users/me/test

すでに機能していますが、問題はログファイルが大きくなることであり、ログファイルを処理する唯一の方法はdaemonizeが停止している場合です。

だから私はsyslogにログインしようとしているので

sudo / usr / sbin / daemonize -u User -a -e / dev / stderr / home / users / me / test | ロガー

stderrへの書き込み時にパーミッションエラーが発生します。Userとして実行しない場合、ログは正常に取得されますが、セキュリティ上の理由から、daemonizeをUserとして実行する必要があります。

私は立ち往生しています助けはありがたいです

私のテストサブメイン{私の$i= 0; for($ i = 0; $ i <10; $ i ++){print"これはテストです"。$i。"\ n"; }}

main(@ARG);

2>&1も試しましたが、機能しません。

4

1 に答える 1

2

CPAN の Daemon::Daemonize などを使用する方がよいかもしれません。STDOUT と STDERR を自動的にリダイレクトできます。必要なすべての setpgrp を処理すると主張しています。

これを Sys::Syslog (同じく CPAN から) の使用と組み合わせると、/usr/sbin/daemonize に依存せずに必要なことをすべて実行でき、実際に何が起こっているかをもう少し制御できると思います。プログラム。

あなたは2つの異なる問題を抱えているようです:

1) プログラムのデーモン化。2) syslog へのロギング。

どちらも、Perl コードで直接解決する方がよい問題です。Daemon::Daemonize と同様に、Proc::Daemonize があります。私はそれらの相対的なメリットについて意見を持っていません。過去に Daemon::Daemonize を使用しただけです。どちらもプログラムをデーモンとして実行します。

syslog への書き込みについては、Sys::Sylog を使用すると面倒な作業が行われます。これは単純なリダイレクトではありませんが、ログ メッセージを送信でき、ログのローテーションを心配する必要はありません。

于 2013-11-05T22:53:36.697 に答える