Я хочу, чтобы вся почта, отправляемая на конкретный псевдоним на машине Linux, обрабатывалась сценарием perl, но sendmail выдает мне ошибку «Служба недоступна», и я не понимаю, что мне не хватает.
Я создал свой скрипт handle_email.pl (сейчас он просто печатает свои параметры в /tmp/email.txt
) и добавил на него символическую ссылку в /etc/smrsh
.
Затем я добавил это в /etc/aliases
:
mailtest: |handle_email.pl
и побежал newaliases
потом. Обратите внимание, что я также пробовал mailtest: |/etc/smrsh/handle_email.pl
который дал те же результаты. Я также пробовал скопировать настоящий скрипт в /etc/smrsh
вместо ссылки, снова те же результаты.
Когда я отправляю почту на псевдоним mailtest, файл в /tmp
никогда не создается, и я получаю это в / var / log / maillog:
Nov 1 14:43:59 localhost sendmail[24839]: qA1IhwHm024839: from=<xxx@xxx>, size=284, class=0, nrcpts=1, msgid=<201211011843.qA1IhwHm024839@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=[10.7.160.180]
Nov 1 14:43:59 localhost smrsh: uid 8: attempt to use "handle_email.pl"
Nov 1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: to=|handle_email.pl, ctladdr=<mailtest@xxx> (8/0), delay=00:00:00, xdelay=00:00:00, mailer=prog, pri=30570, dsn=5.0.0, stat=Service unavailable
Nov 1 14:43:59 localhost sendmail[24850]: qA1IhwHm024839: qA1IhxHm024850: DSN: Service unavailable
Nov 1 14:44:00 localhost sendmail[24850]: qA1IhxHm024850: to=<xxx@xxx>, delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=31594, relay=sy-int-mx.xxx. [<IP addr>], dsn=2.0.0, stat=Sent (qA1Ii4127508 Message accepted for delivery)
Я получаю электронное письмо с описанием сбоя, в котором говорится:
The original message was received at Thu, 1 Nov 2012 14:58:16 -0400
from [<ip address>]
----- The following addresses had permanent fatal errors -----
|/etc/smrsh/handle_email.pl
(reason: Service unavailable)
(expanded from: <mailtest@xxx>)
----- Transcript of session follows -----
smrsh: "handle_email.pl" not available for sendmail programs
554 5.0.0 Service unavailable
Почему smrsh не выполняет мой скрипт?
Обновить: Отвечая на вопросы в комментариях.
Я скопировал сценарий в /etc/smrsh
и удалил ссылку. Права доступа к файлу - 0700 (также пробовал 0755), а первая строка - #!/usr/local/bin/perl
что правильно. Есть только один файл в /etc/smrsh
. Вывод ls -l:
[main:g:64] xxx:/etc/smrsh# ls -l
total 4
-rwx------. 1 root root 281 Nov 1 16:35 handle_email.pl
Попробуйте изменить разрешение /etc/smrsh/handle_email.pl на 755, и я думаю, у вас будет больше успеха. Вы можете перезапустить sendmail, чтобы убедиться, что все правильно инициализировано и настроено.
smrsh может быть привередливым. В вашем примере скрипт принадлежит пользователю root. Попробуйте сменить владельца на почту.
Вам нужно добавить handle_email.pl в / etc / smrsh, а также каждую программу, которая выполняется из handle_email.pl. Поэтому, если вы используете echo для записи /tmp/email.txt, вам также необходимо сделать:
ln -s /bin/echo /etc/smrsh/echo
Изменить: Итак, в вашем случае вам нужно связать / usr / bin / perl