1

通常はPostfixをリロードするスクリプトがありますが、/../../reload.pl11で許可が拒否されました。

そして、これが私の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

解決策は、postfixcmdを実行するための完全なパスを指定することです。

$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

コントロール バイナリ自体または init スクリプトを介しpostfixてリロードできます。postfixinit スクリプトは、引数として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 に答える