shebang 与 /usr/bin/env 和 sudo

shebang 与 /usr/bin/env 和 sudo

我有很多脚本,通常它们以 shebang 和 /usr/bin/env 以及所需的解释器(例如“#!/usr/bin/env perl”)开头。多年来,这种方法一直工作得很好,但由于某种原因,我不明白我在一台 FreeBSD 机器上有一个脚本,这会破坏 sudo:

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

以用户 nagios 身份执行此操作效果很好。使用 sudo 作为用户 nagios 执行此操作也可以正常工作。

但是,通过监控服务器中的 nrpe 守护进程执行此操作,其中 nrpe 以用户 nagios 身份运行并使用 sudo 作为 command_prefix ,它会退出并显示错误代码 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 一起使用,但该脚本旨在对于不同的操作系统类型是通用的。

那么,知道我在这里缺少什么吗?

相关内容