Мы настраиваем Exim4
маршрутизатор с driver = queryprogram
, с идеей выполнить сценарий и перенаправить определенные адреса на основе логики сценария.
Проблема в том, что при отладке того, как exim будет маршрутизировать адрес, мы получаем my_router router: command returned non-zero code 127
ошибка.
Почему exim получает command returned non-zero code 127
? Как мы можем это исправить?
Спасибо!
Вот некоторая, надеюсь, полезная информация:
# exim -d -bt anaddress@mylocaldomain.com
...
--------> my_router router <--------
local_part=anaddress domain=mylocaldomain
checking local_parts
anaddress in "! root"? yes (end of list)
R: my debug message
calling my_router router
my_router router called for anaddress@mylocaldomain.com: domain = mylocaldomain.com
requires uid=1001 gid=1001 current_directory=/tmp
direct command:
argv[0] = /tmp/myscript.sh
direct command after expansion:
argv[0] = /tmp/myscript.sh
my_router router: defer for anaddress@mylocaldomain.com
message: my_router router: command returned non-zero code 127
anaddress@mylocaldomain.com cannot be resolved at this time: my_router router: command returned non-zero code 127
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=8094 terminating with rc=1 >>>>>>>>>>>>>>>>
Скрипт (/tmp/myscript.sh), обрабатывающий почту, просто
#/usr/bin/php
echo 'redirect another_address@another_domain.com';
exit;
У скрипта есть разрешения
$ ls /tmp
total 196K
4.0K -rwxrwxr-x 1 someuser somegroup 58 Oct 5 20:48 myscript.sh
Маршрутизатор настроен в exim4.conf.template
так как:
...
my_router:
debug_print = "R: my debug message"
driver = queryprogram
command = /tmp/myscript.sh
current_directory = /tmp
command_user = myuser
# domains = +local_domains
local_parts = ! root
cannot_route_message = Unknown Special user
В сценарии допущена опечатка: после хеша опущена фраза.
#!/usr/bin/php
echo 'redirect another_address@another_domain.com';
exit;
Код выхода 127 означает, что соответствующий интерпретатор не найден, поскольку строка shebang имеет неправильный формат.
Также я не уверен, что вы действительно хотите, чтобы ваш скрипт интерпретировался PHP. Так что, возможно, вам придется заменить первую строку на #!/bin/sh