2013-09-03 4 views
0

У меня есть PHP скрипт на сервере Linux, которые работают как:Как перезапустить скрипт PHP каждые 1 час?

поЬир PHP myscript.php>/Dev/нуль &

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

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

+3

Cron/Crontab - это то, что вы ищете, google it. – Sugar

+0

С помощью cron вам может даже не понадобиться nohup ... – Romain

+0

Сценарий имеет функции, которые работают неопределенно. Поэтому, когда он начинается, он должен оставаться открытым. Поэтому перед повторным запуском скрипта он должен быть убит. – user1002601

ответ

1

К добавить использование cronjob:

crontab -e 

затем

0 * * * * timeout 3600 nohup php myscript.php > /dev/null & 

timeout парам будет убить процесс после '3600' второй в этом примере

UPDATE

также вы можете использовать

set_time_limit(3600); 

в начале вашего файла PHP который убьет его после 3600 секунд

+0

Этот скрипт запускается через 1 час, затем убивает его и снова запускается из-за часового cron. Но что, если он убивает процесс, как только он начнется снова? Этот 60-минутный cron и 60-минутный тайм-аут будут правильно выравниваться для повторного запуска скрипта каждый час? Как мы можем быть уверены в этом? Что, если я поставил 3599 или 3590 секунд, чтобы быть уверенным? – user1002601

+0

Также спасибо за простой ответ. У меня есть другие сценарии. И все они в разных каталогах. Дать полный путь к crontab будет достаточно для них? – user1002601

+0

Да, вы можете сделать что-то вроде уменьшения 3600, но когда cronjob запустится снова, он запустит новый процесс, так что убийство предыдущей проблемы не будет проблемой, но вы можете уменьшить его, чтобы убедиться, что только один работает в данный момент времени. – trrrrrrm

0

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

эти примеры

link1 и link2 и link3

2

запустить сценарий с помощью сценария оболочки, который запускает бесконечный цикл и ждет процесс закончен. Поскольку у вас также есть бесконечный цикл в вашем скрипте PHP, это будет только в том случае, если ваш скрипт остановлен.

Далее вы пишете PID скрипта в текстовый файл. Вы должны получить ПИД с этим: http://php.net/manual/en/function.getmypid.php

Следующим шагом является создание кроны, которая запускается каждый час. Этот cronjob считывает файл PID .txt, удаляет его и убивает процесс.

Поскольку сценарий оболочки, упомянутый в начале, также имеет бесконечный lopp, он перезапустит процесс php напрямую.


Примеры скриптов:

Автор сценария:

#!/bin/bash 
while true 
do 
    php myscript.php > /dev/null 
done 

сохранить его, например, как start.sh и установить chmod + x для его выполнения.

Теперь вы можете запустить его с: nohub ./start.sh &

в.PHP вы делаете что-то вроде этого в начале:

file_put_contents("/tmp/yourscript.pid", getmypid()); 

И ЭРВО сценария хрон как Баш:

#!/bin/bash 
PID=`cat /tmp/yourscript.pid` 
rm /tmp/yourscript.pid 
kill -9 $PID 

вы также можете в хрон сценарий с PHP:

<?php 
$pid=file_get_contents("/tmp/yourscript.pid"); 
unlink("/tmp/yourscript.pid"); 
shell_exec("kill -9 $pid"); 
+0

Спасибо за подробный ответ. Таким образом, сценарий оболочки в начале будет запущен с терминала. Но другой сценарий оболочки, который считывает PID из файла, удаляет его, а затем убивает процесс, запускается из cron. Здесь мы убьем PHP-скрипт, но скрипт оболочки снова запустится. Отлично. Но проблема в том, что я не знаю сценариев bash, теперь мне нужно посмотреть примеры bash для этого. – user1002601

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