1

我有一个通常应该重新加载 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';
4

2 回答 2

3

你可能的意思是:

system("$ENV{PATH}/postfix reload");

或者

system("/path/to/postfix/binary/postfix reload");

/etc/postfix很可能是一个不可执行的配置文件,因此权限被拒绝错误。你可以postfix在你的系统上找到路径which postfix

于 2012-12-20T10:00:54.867 回答
2

您可以postfix通过postfix控制二进制文件本身或通过初始化脚本重新加载。反过来,init 脚本只执行postfix控制二进制文件reload作为其参数,因此您可以跳过它。

您看到原始错误的原因/etc/postfix可能是包含配置文件的目录。您不能执行目录。

因此,您应该执行控制二进制文件本身。这通常位于/usr/sbin/postfix而不是位于/usr/bin。你也不需要PATH为它设置。所以:

  1. 删除带有 的行$ENV{PATH} = ...,您不需要它。
  2. 将系统调用更改为system("/usr/sbin/postfix reload");
于 2012-12-20T10:09:31.583 回答