我有一个通常应该重新加载Postfix的脚本,但我在/../../reload.pl 11获得了许可被拒绝。
这是我的perl脚本:
#!/usr/bin/perl -w
#
# Script Name : reload postfix
# version : v1.0
#
$ENV{PATH} = '/usr/bin';
print $<." ".$>;
# Relaod postfix (opt)
system('/etc/postfix reload');
结果是:
0 0
Can't exec "/etc/postfix": permission denied at /../../reload.pl 11
解决方案是提供执行postfix cmd的完整路径:
$ENV{PATH} = '/usr/sbin';
答案 0 :(得分:3)
你可能意味着:
system("$ENV{PATH}/postfix reload");
或
system("/path/to/postfix/binary/postfix reload");
/etc/postfix
很可能是一个不可执行的配置文件,因此权限被拒绝错误。您可以使用postfix
which postfix
的路径
答案 1 :(得分:2)
您可以通过postfix
控件二进制文件本身或通过init脚本重新加载postfix
。 init脚本只执行postfix
控制二进制文件,其中reload
为参数,因此您可以跳过它。
您看到原始错误的原因是/etc/postfix
可能是包含配置文件的目录。您无法执行目录。
因此,您应该执行控制二进制文件。这通常位于/usr/sbin/postfix
,而不是/usr/bin
。您也无需为其设置PATH
。因此:
$ENV{PATH} = ...
行,您不需要它。system("/usr/sbin/postfix reload");