/usr/bin/env と sudo を使用した shebang

/usr/bin/env と sudo を使用した shebang

私は多くのスクリプトを持っていますが、通常はshebangと/usr/bin/envと必要なソルバー(「#!/usr/bin/env perl」)で始まります。この方法は何年もうまくいきましたが、何らかの理由でFreeBSDシステムにsudoを停止するスクリプトがあることを理解していません。

% cat test.pl
#!/usr/bin/env perl
system( "id" );
exit 0;

nagiosユーザーとしてこれを行うと正常に動作します。ユーザーnagiosとしてsudoを使用してこれを実行しても問題ありません。

ただし、nrpeがユーザーnagiosとして実行され、sudoをcommand_prefixとして使用する監視サーバーのnrpeデーモンを介してこれを実行すると、エラーコード3で終了します。 nrpeは何の理由も表示せず、終了コードのみを表示するので、これが機能しない理由がわかりません。 (はい、sudoはコマンドラインで動作するため、/usr/bin/envとtest.plを許可するように正しく設定されているようです)

nrpe[50742]: Running command: /usr/local/bin/sudo /usr/local/etc/nagios/test.pl
nrpe[50742]: Command completed with return code 3 and output: 
nrpe[50742]: Return Code: 3, Output: NRPE: Unable to read output

はい、Shebang文字列を/usr/local/bin/perlに変更してnrpeを介してsudoで使用できますが、スクリプトはさまざまなOSタイプで一般的に使用されるように設計されています。

では、私がここで何を見逃しているのか知っていますか?

ベストアンサー1

おすすめ記事