2016-10-27 2 views
-1

У меня есть задача в cron: каждые 3 часа запускать скрипт php.Команда Cron запускает php-скрипт каждые 60 секунд, а затем перегружает все

Я тоже пытался с WGET и PHP, но получил ту же проблему. Иногда скрипт работает более 2 минут, но в основном достаточно 30 секунд. И если время выполнения более 60 секунд, оно падает (504 getway) и cron снова запускает этот скрипт. И снова и снова. Смертельная перегрузка в течение нескольких часов.

Я попытался это с огромным количеством другого синтаксиса, но не:

Как я могу управлять командой только с 1 попытки запустить мой сценарий? Мне не нужно, чтобы он выполнял миллионы раз каждые 60 секунд. Любые ограничения?

Может быть, я могу ограничить/сократить время выполнения до 20 секунд, чтобы предотвратить запуск некорректного скрипта. Мне просто нужно запустить скрипт, мне не нужна система, чтобы ждать в любое время, сценарий каким-то образом завершает задачу.

+0

фатальная перегрузка ГДЕ? система, выполняющая задание, или система, на которой работает задача? –

+0

Опубликовать запись crontab для задания cron, возможно, проблему с вашим интервалом. Вы пробовали команду прямо в консоли? Как долго время выполнения в этом случае? –

ответ

0

Вы можете установить максимальное время выполнения непосредственно в сценарии PHP с set_time_limit (int $seconds); подробнее here

0

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

Предполагая, что вы не полагаетесь на информацию о сервере или переменные GET/POST в своем скрипте: попробовали ли вы его запустить вручную? Что-то странное происходит, когда вы это делаете?

Простая запись кронтаб, как показано ниже будет запускать скрипт только один раз каждые три часа:

* */3 * * * php /path/to/script.php 
+0

Я обслуживаю его вручную через SSH или напрямую через браузер. Он работает так, как если бы ему понадобилось более 60 секунд. Проблема только в том случае, если cron столкнулся с сверхурочной работой и снова запускает скрипт, но предыдущий запуск все еще находится в процессе, и через 60 секунд он снова попадает. Итак, достаточно максимального времени выполнения set_time_limit (int $ seconds)? –

+0

Если вы запускаете скрипт каждые три часа, я не могу себе представить, что ваш скрипт будет перекрываться ... Но да, вы можете использовать 'set_time_limit (60)' в самом начале вашего скрипта, чтобы убедиться, что он выиграл 't длиться более 60 секунд. – 1sloc

+0

set_time_limit (120) отлично работает. Достаточно 120 секунд для завершения скрипта. Спасибо, ребята! –

0

Если вы хотите гарантированно избегая двух скриптов запуска в то же время, вы должны использовать какой-то замок, например простейшая блокировка файла с помощью flock