Как отследить, работают ли запущенные процессы на PHP CLI через веб-сервер?
Добрый день.
При запуске и перезагрузке сервера на Windows Server 2003 прописан автозапуск трёх bat-скриптов. Эти bat-скрипты вызывают скрипты на PHP-Cli, которые постоянно висят в памяти.
Проблема в том, что скрипты не всегда запускаются, и временами сложно понять, что именно не запущено.
Вопрос: возможно ли организовать мониторинг работы этих скриптов через php в apache? Если можно, что использовать для однозначной идентификации, что был запущен именно этот скрипт?
Первое, что пришло в голову, это подсаживаться на сокеты, и при запросе отдавать некую отладочную инфу о процессе. Но смущает наличие подводных камней, которых пока не вижу - а они почти наверняка есть.
пусть скрипты пишут в файл свой PID
веб скрипт сканит папку на файлы PID и считывает их. затем ищет в ps ax c номером процесса. если нет, то не работают
Да, хорошая идея, хранить можно и в БД такую инфу, до кучи ещё и дату запуска туда записывать. А для проверки вызывать shell_exec'ом tasklist и там искать. Пожалуй, так и сделаю. Спасибо.
maxyc_webber: номер процесса не означает что скрипт там работает. Номер процесса разве уникальный? ПРоцес может быть с тем же номером но он может не обслуживать скрипт.
Поскольку мой сервер под виндой, сделал всё через COM WMI:
$wmi = new COM('winmgmts://');
$processes = $wmi->ExecQuery('SELECT CommandLine, ExecutablePath, CreationDate, ProcessId FROM Win32_Process');
По свойству CommandLine ищу нужные процессы (нужные значения заданы заранее и уникальны). Завершаю тоже по нему - делаю выборку ProcessId по условию CommandLine и запускаю taskkill.
Я думаю что демоны запускающие php ваще никак не скажут какой срипт они тянут. Точнее узнать это можно но через proccess hacker на закладке handlers но толку маловато. php-cgi.exe обслуживает массу скриптов. Я думаю если что он и может возвратить то смотрите уже сам апач.