Назад | Перейти на главную страницу

Как убить сбежавшего cronjob

У меня есть cronjob, который настроен на постоянное выполнение. Это файл php, который передает данные из твиттера. Однако твиттер время от времени отключается, или мы теряем соединение, поэтому я каждую минуту проверяю cron, чтобы попытаться запустить файл. Сценарий php проверяет файл блокировки, чтобы убедиться, что несколько копий не запускаются. Дело в том, что этот скрипт будет работать часами подряд, и я хочу иметь возможность его убить. Однако я не могу найти его с помощью таких команд, как

ps ux

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

Я использую

/usr/bin/php /var/www/twitter/stream.php

для выполнения в моем файле cron, и я знаю, что он работает, потому что каждую минуту он записывает файл в каталог. Я могу остановить cron, но процесс продолжается, мне просто нужно его убить. Не уверен, принадлежит ли это сюда или в Stack Overflow.

Ты делаешь это неправильно. (По крайней мере, по моему скромному мнению :-)

Вы можете делать то, что хотите, как предлагали Гикозавр или Джеймс Йель, но я думаю, вам действительно нужны PHP pcntl_alarm () функция (и ее относительная pcntl_signal), что позволит вашему PHP-скрипту использовать преимущества SIGALRM объекта и убить себя, когда дела пойдут не так.

То, что вы делаете с будильником, - это ваш звонок (он может быть таким простым, как «Выйти, если я бегаю уже час», либо сложным, как «Проверить, получили ли мы данные из твиттера. Если не повторить- инициализировать соединение, и если мы по-прежнему не получим выхода данных и позволим скрипту снова запуститься позже »- все зависит от того, насколько сложен ваш скрипт).

Больше вопросов по SIGALRM и обработка сигналов, вероятно, должна перейти в StackOverflow - они (надеюсь) знакомы с ним и могут дать вам больше рекомендаций с точки зрения программирования :-)

Чтобы показать демонов в ps вам нужно включить -e вариант (System V / POSIX) или a (BSDish). Пытаться ps aux или ps -ef.

Обычно процессы записывают PID в файл блокировки, таким образом вы можете узнать, запущен ли процесс и его идентификатор в одном месте.

Я бы посоветовал вам изменить свой скрипт для этого, тогда вы можете просто posix_kill или аналогичный по мере необходимости.