Как можно выполнять скрипт checkmail.php не по cron, а сразу после получения письма сервером nginx?

Как можно выполнять скрипт checkmail.php не по cron, а сразу после получения письма сервером nginx?

По cron всё работает, но он может проверять этот скрипт не чаще раз в 2 минуты. Можно ли осуществить запуск php скрипта сразу после получения письма? Выполняет ли сервер nginx какие-то действия к которым можно было бы прицепиться?

Сервер на Debian. Включена cPanel.
  • Вопрос задан
  • 3437 просмотров
Пригласить эксперта
Ответы на вопрос 4
IlyaEvseev
@IlyaEvseev
Opensource geek
Если письмо кладется в файл, то можно следить за каталогом с письмами с помощью inotify (linux-only?).
В Дебиане и Убунте смотрите на пакеты incron, iwatch.

Вариант №2 — следить за логами nginx'a и запускать команду при ловле события:
(
date +'%Y.%m.%d %H:%M:%S -- Started...'
while : ; do
    tail -F /var/log/nginx/access.log |
    grep --line-buffered -i -- "smtp" | 
    while read line; do
        date +"%Y.%m.%d %H:%M:%S -- $line"
        php -f /path/to/checkmail.php
    done
    date +'%Y.%m.%d %H:%M:%S -- Restarted...'
    sleep 30
done
) > /var/log/checkmail.log 2>&1 &

Примерно так.
Ответ написан
Комментировать
la0
@la0
Не думаю, что nginx может быть хоть минимально полноценным SMTP сервером.
Насколько я понял, nginx только прокси-авторизатор.
С exim я делал так:
см. habrahabr.ru/post/164661/
Ответ написан
Комментировать
la0
@la0
Да и еще. Если cpanel, то там это называется cpanel mail piping (зависит от используемого почтового сервера)
Ответ написан
Комментировать
slpdmn
@slpdmn
В Cpanеl есть опция MailForwarding там кнопка адвансед и включаете piping, т.е. указываете ссылку на сохраненный ранее скрипт примерно такого содержания:

#!/usr/bin/php -q
<?php
require_once «ваш_скрипт.php»;
?>

первая строка должна быть прямо с начала файла, абсолютно строго без пробелов. Этот скрипт стартанет автоматом сразу после получения письма, крон и нгинкс не нужен, только CPanel. Собственно всё.
Не забудьте дать разрешение обоим файлам на локальное исполнение. Решение проверено и работает, просто много подводных камней по пути.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы