2013-03-26 2 views
0

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

Так что мне интересно, знаете ли вы какие-либо решения, в которых я могу перезапустить мой сервис, когда он будет завершен, и ни при каких обстоятельствах не повторять повторный запуск до того, как весь код будет выполнен?

Прошу прощения, если об этом ответили раньше или его легко найти в Google, я попытался найти что-то, но безрезультатно.

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

+0

Вы можете сделать своего рода деамон для работы в фоновом режиме и ждать задач. –

+1

Вы ищете '' 'daemon''' – Luceos

+0

Как и в случае с этими комментариями, создайте демона, который запускает ваш код.Затем используйте другой скрипт оболочки, который запускается через cron, чтобы проверить, продолжает ли демон. Если это не так, перезапустите демон. Вы можете установить сценарий оболочки как можно чаще в пределах ограничения cron. – nickb

ответ

1

Посмотрите на это: http://www.godlikemouse.com/2011/03/31/php-daemons-tutorial/

Что вам нужно, это демон, который продолжает работать. Есть больше решений, чем цикл while.

Ниже я когда-то в проекте: http://kvz.io/blog/2009/01/09/create-daemons-in-php/, это также пакет PEAR: http://pear.php.net/package/System_Daemon

Для получения дополнительной информации см следующие SO ссылки:

Что такое демон: What is daemon? Their practical use? Usage with php? Пошаговое использование: PHP script that works forever :)

+1

Спасибо, я посмотрю на деамона, и со страницы, с которой вы связались, похоже, что это будет трюк. Ура! – Kugie

-1

Попробуйте создать пользовательскую логику, в которой вы можете установить флаг в положение «ВКЛ.» И «ВЫКЛ» и в вашем CRON, вы можете проверить перед запуском кода внутри него. Я хотел предложить что-то вроде решения на основе очереди, как только вы получите запись, а затем запустите логику своей обработки. Который может быть либо демоном, либо cron. Это даст больше контроля, если ваша задача в порядке, чтобы выполнить сейчас. Под редакцией его

+0

Что такое кукуруза? – nickb

0

Если вы не хотите, чтобы узнать, как код демона, я Recommand с помощью программного обеспечения, которое управляет процессами в пространстве пользователя: Руководитель (http://supervisord.org/)

Вам просто нужно написать файл конфигурации, чтобы указать, какие процессы вы хотите запустить, и как. Он очень прост в настройке и очень адаптирован (вы можете заставить иметь только один экземпляр вашего процесса или вместо него иметь фиксированное количество экземпляров ... и т. Д.). Он также будет обрабатывать автоматический перезапуск в случае сбоя вашего сценария и регистрации.

На стороне PHP, просто создать сценарий, который никогда не завершает работу, используя while(true) { ... } петли, и добавьте запись, как это в конфе supervisord в:

[program:your-script] 
command=/usr/bin/php /path/to/your_script.php 

Я использую это программное обеспечение производства для нескольких проекты (для запуска рубинов и php gearman асинхронных рабочих для веб-сайтов).

+0

Ницца, также слышал об этом; также попробуем это;) – Luceos

+0

Спасибо, если деамон не сработает, я дам это go :) – Kugie

+0

@ user1477205 сделайте, как вам будет угодно :) хотя я бы сказал, попробуйте супервизора и напишите демона, если он не сработает, это больше работайте над тем, чтобы использовать один и тот же ресурс. – SirDarius

Смежные вопросы