cabat

 
<<< Back

Контроль работы модуля SMTPCatcher

Один из вариантов контроля работоспособности модуля SMTPCatcher при перехвате почтовых сообщений от камер видеонаблюдения

В большинстве камер видонаблюдения реализован механизм отправки почтового сообщения при детекции людей.

Для отправки фото с камер в телеграм решил использовать эту фунцию, воспользовавшись модулем SMTPCatcher,
который позволяет перехватить такие сообщения и выполнить необходимые действия в МДМ.

Но выяснилось, что периодически модуль перестает перехватывать сообщения, при этом цикл модуля продолжает работать.
Т.е. модуль вроде работает, но перехвата сообщений не происходит, при этом после принудительного перезапуска работоспособность восстанавливается.

Придумал довольно корявый, но вполне рабочий способ, смысл которго заключается в регулярной отправке модулю тестовых сообщений с котролем результата.

Для реализации использовал еще один модуль sendemail и пару скриптов.

Скрипт SMTPCatcherUpdate
запускается из обработчика перехвата служебного сообщения и выполняет обновление времени последней удачной обработки сообщений:

sg("ThisComputer.SMTPCatcherLastUpdate",time());

Скрипт SMTPCatcherControl
запускается раз в 10 минут и выполняет контроль состояния модуля и при необходимости перезапускает его:

$FromLastUpdate = time() - gg('ThisComputer.SMTPCatcherLastUpdate');

if ($FromLastUpdate > 650)
{
    sg("cycle_SMTPCatcherControl", "restart");
    debmes("SMTPCatcher: перезапуск");
    registerEvent('SMTPCatcherCycleRestart','',365);
    runScript('SendToTelegram', array('text'=>'Перезапуск цикла SMTPCatcher'));
    sg("ThisComputer.SMTPCatcherLastUpdate",time());    // иначе перезапуск зациклится
}
else
{
    include_once(DIR_MODULES . 'mod_sendemail/mod_sendemail.class.php');
    $se = new mod_sendemail();
    $se->sendsmtp('smtp@test.ru', 'SMTP hook test', 'SMTP hook test message');
}

10.09.2021 Update

ВАЖНО! Оказалось, что для корректного перезапуска цикла необходимо указывать название цикла маленькими буквами

sg("cycle_smtpcatcherControl", "restart");

иначе возникают ошибки такого вида (в самой верхней строке пример успешного перезапуска цикла после исправления):

15:35:38 0.45927800 Closing thread: exec php -q ./scripts/cycle_smtpcatcher.php --params "a:0:{}">>/var/www/html/cms/debmes/log_2021-09-09-cycle_smtpcatcher.php.txt
15:34:51 0.97661500 Cannot start thread './scripts/cycle_SMTPCatcher.php' -- FILE NOT FOUND
15:30:34 0.85315800 Cannot start thread './scripts/cycle_SMTPCatcher.php' -- FILE NOT FOUND
15:30:00 0.47382700 SMTPCatcher: перезапуск
15:10:32 0.84255500 Cannot start thread './scripts/cycle_SMTPCatcher.php' -- FILE NOT FOUND
15:10:00 0.44035500 SMTPCatcher: перезапуск

Discuss (3) (1)

See also:
2019-11-27 Небольшой тюнинг модуля MySensors
2019-08-30 Настройка OpenVPN на Raspberry Pi2 (дистрибутив Wheezy)

Санкт-Петербург, Россия

На форуме: cabat