Разрешение отклонено, когда я выполняю перезагрузку Postfix в Perl-скрипте

У меня есть скрипт, который обычно должен перезагружать 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';

person ImadT    schedule 20.12.2012    source источник


Ответы (2)


Вы, вероятно, имеете в виду:

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

or

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

/etc/postfix, скорее всего, является файлом конфигурации, который не является исполняемым, поэтому возникает ошибка отказа в разрешении. Вы можете найти путь к postfix в вашей системе с помощью which postfix

person RobEarl    schedule 20.12.2012
comment
в терминале я могу выполнить перезагрузку $postfix, после тестирования вашего решения я получил: Нет такого файла или каталога - person ImadT; 20.12.2012
comment
Используйте which postfix, чтобы найти путь к двоичному файлу постфикса. - person RobEarl; 20.12.2012

Вы можете перезагрузить postfix либо через сам управляющий двоичный файл postfix, либо через сценарий инициализации. Сценарий инициализации, в свою очередь, выполняет только управляющий двоичный файл postfix с reload в качестве аргумента, так что вы можете просто его пропустить.

Причина, по которой вы видите исходную ошибку, заключается в том, что /etc/postfix, вероятно, является каталогом, содержащим файлы конфигурации. Вы не можете выполнить каталог.

Поэтому вы должны выполнить сам управляющий двоичный файл. Обычно он находится в /usr/sbin/postfix, а не в /usr/bin. Вам также не нужно устанавливать для него PATH. Следовательно:

  1. Удалите строку с $ENV{PATH} = ..., она вам не нужна.
  2. Измените системный вызов на system("/usr/sbin/postfix reload");
person Moritz Bunkus    schedule 20.12.2012