NagiosボックスにNagiosリモート外部コマンドデーモンをセットアップして構成しましたが、開始するとすぐにエラーなしで終了するように見えることがわかりました。
サーバーはubuntu 12.10で、nrecdは単純なプロセスとしてtarファイルからインストールされました-構成ディレクトリを作成し、/etc/rc.localに行を追加し、binファイルを/usr/binにコピーして構成を行います。
を実行するsudo nrecd
と、応答はServer nrecd started successfully. PID = 10698.
になりますが、すぐに実行しps -A | grep 10698
ても何も表示されません。同様に、anetstat -an
は 5665 でリッスンしているサービスがないことを示しています。
sudo nrecd stop
ログファイルに表示される唯一のエントリは、サーバーを停止したときです(古いpidfileを削除したときに実際に発生するすべてを考慮すると、それらも虚偽です)。
/usr/bin/nrecd で、「サーバーが正常に開始されました」行を出力する行のコードを調べ、print
その場所に他の行を追加しました。
my $mypid = daemonize();
print "Server $basename started successfully. PID = $mypid.\n" if $mypid;
print "line 122";
create_pid_file( $mypid, $pidfile );
print "line 124";
change_privileges( $user, $group );
print "line 126";
lock_stdio();
print "line 128";
chmod( 0666, $logfile );
print "line 130";
logmsg( "Server $basename Started Successfully.\n" );
わかりました:
Server nrecd started successfully. PID = 10698.
line 122line 124line 126
これは、問題が lock_stdio(); にあることを示しています。サブ。これは私が立ち往生するところに近いです。私は perl プログラマーではありませんが、IO を /dev/null にリダイレクトするだけで、すべてのサブシステムが標準のように見えます。私は perl -d で実行しようとしましたが、最終的にはファイルを 1 行ずつ見ていき、何も新しいことを学ぶことはありませんでした。
サブ自体は次のとおりです。
sub lock_stdio {
open( STDIN, '<', '/dev/null' ) or croak "Can't read /dev/null: $!";
open( STDOUT, '>>', '/dev/null' ) or croak "Can't write to /dev/null: $!";
open( STDERR, '>>', '/dev/null' ) or croak "Can't write to /dev/null: $!";
return();
};
これを解決するために誰かが提案できることはありますか? それが本当にその 3 ライン サブに分離されている場合、問題を見つけることができないのはばかげていると感じます (私にはストック標準に見えると言ったように)。どんな助けでも大歓迎です!