2013-04-24 4 views
2

Мне нужно, чтобы скрипт php работал и работал на моем сервере, скрипт запускается и проверяет БД для записи, обрабатывает, если необходимо, спит для 3, а затем петли в верхней части скрипт в бесконечном цикле. Проблема заключается в ее запуске, если я запускаю его через терминал (его запуск в системе ubuntu) с помощью php script.php, и если сеанс терминала закончился, скрипт перестает работать.постоянно работает php-скрипт

Итак, как я могу начать запуск сценария, чтобы он оставался бегущим в фоновом режиме.

Кроме того, если я установил задание cron, которое работает один раз в час и запускает другой скрипт, который проверяет, что основной файл все еще запущен, и если он не перезагружает его, как бы получить этот скрипт проверки, чтобы проверить, что начальный скрипт все еще работает (даже если он находится во сне).

Любая помощь будет принята с благодарностью

+0

'superisord' может сделать это за вас, но работает только как демон, создавая скрипт' init.d' с заголовками стиля LSB, возможно, пусть он будет смотреться 'monit', а не какой-то пользовательский скрипт. – Wrikken

+0

Вероятно, вы найдете мой ответ самым простым. : P –

ответ

3

Если при запуске сценария из Интернета является вариант, а затем установить time limit на «безлимитный» (в самом скрипте):

set_time_limit(0); 

и множества ignore_user_abort к "true":

ignore_user_abort(true); 

Затем вы можете запустить скрипт как обычный из Интернета, и он будет работать вечно (пока процесс не будет убит или сценарий exits обычным способом).

Конечно, вы можете (и ДОЛЖНЫ) защитить такой стартер-скрипт паролем, например. используя HTTP-аутентификацию через .htaccess, так что кто-то не может запускать много вечно запущенных скриптов, на которых будет установлен ваш сервер.


При проверке, выполняется ли другой процесс, см question1, question2, или попытаться найти «[PHP] проверить, если процесс запущен» здесь, на StackOverflow. См. Также http://php.net/manual/en/refs.fileprocess.process.php.

+0

Спасибо, что ответишь, работает как сон. ваш спасатель. – David

+0

@ Давид: ну, спасибо :) Я рад, что смогу помочь! –

1

Cron Работа будет одно решение: More details about Cron job.

Другой способ сделать это состоит в использовании Gearman или некоторых других Taks менеджеров, как в этом post

1

Если вы хотите, чтобы запустить его из терминала и сохранить он работает постоянно, посмотрите на GNU screen. Это виртуальный терминал, который работает в фоновом режиме, даже когда вы закрываете терминал.

$ sudo apt-get install screen 

При этом, вы можете просто сделать:

$ screen php myscript.php 

Скрипт будет загружаться в сеансе screen, который вы можете отключиться от, и даже при закрытии терминала будет продолжать работать. Для того, чтобы проверить на нем, просто вызовите:

$ screen -x 

Лучшая часть screen является свободным программным обеспечением и в репо всех хороших дистрибутивах (и других * NIX выполняется, если Linux не плавает лодку).

+0

+1, похоже, легко справляется с реальной проблемой. – bestprogrammerintheworld

+1

Почему бы просто не использовать «nohup php myscript.php &' - 'nohup' для продолжения работы после отключения,' & 'для запуска команды в фоновом режиме и управления релизом терминала. .. –

+0

'nohup' может это сделать, но« экран »имеет то преимущество, что его можно повторно подключить. Процесс 'nohup' должен быть убит через' pkill', если он зависает, в то время как 'screen' может быть убит через' screen'. –

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