Проверьте, работает ли еще php-скрипт

У меня есть скрипт, который слушает jabber-сервер и отвечает соответствующим образом. Хотя это не должно было прекратиться, прошлой ночью это произошло. Теперь я хочу запускать задание cron каждую минуту, чтобы проверить, работает ли скрипт, и запустить его, если нет.

Вопрос в том, как мне проверить, работает ли конкретный скрипт?

Некоторые решения были опубликованы здесь, но это все для Linux, а я ищу решение для Windows. Любые идеи, пожалуйста? Спасибо.


person Nirmal    schedule 14.04.2010    source источник


Ответы (3)


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

person Danten    schedule 14.04.2010
comment
Я могу использовать этот обходной путь в качестве последнего средства. Есть ли какой-нибудь сценарий оболочки Windows, который выполнит эту работу? - person Nirmal; 14.04.2010
comment
Сценарии оболочки Windows менее удобны для пользователя, чем JCL, и это о чем-то говорит, поэтому я боюсь, что не могу вам помочь. Вы можете попробовать изучить PowerShell, поскольку это кажется полезным. - person Danten; 14.04.2010

Вот что я обычно делаю:

  1. создайте каталог состояния, например: /data/status/
  2. on my script, have it check if status file is exists
    1. if it does exist, exit script
    2. если не существует, продолжить процесс

Однако в этом есть проблема: что, если скрипт умрет, а он не удалит файл состояния?

Вы можете добавить небольшую проверку сохранения, например:

  1. Каждую минуту обновлять файл состояния
  2. При каждом запуске cron проверяйте, обновлялся ли последний раз файл состояния, например: 10 или 30 минут назад (мы можем предположить, что наш cron-скрипт умер), мы можем запустить cron-скрипт.
person ariefbayu    schedule 14.04.2010

У меня была такая же проблема, и я решил с помощью этого кода:

file_put_contents("status.txt","ping");

Я поместил его в цикл моего скрипта

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

чтобы не перегружать HD, вы можете сделать что-то вроде этого:

$i++
if( $i%100 == 0)
    file_put_contents("status.txt","ping");

это запишет файл, когда $i == 100 или 200 или 300 и т. д.

это обходной путь

person Leo    schedule 14.04.2010
comment
Насколько это эффективнее, чем обновление поля метки времени в базе данных? Я думаю, что обновление базы данных лучше, поскольку у нее есть свои механизмы блокировки. Принимая во внимание, что мы можем оказаться в тупике, если мы зависим от файла. Пожалуйста, поправьте меня, если я ошибаюсь. - person Nirmal; 14.04.2010
comment
Я запустил много сценариев на своем ноутбуке. Чтобы получить доступ к mysql с моего рабочего стола, мне пришлось бы установить PHP. Это становится ненужным, когда я работаю только с текстовым файлом. Но каждый случай следует рассматривать отдельно. - person Leo; 17.04.2010