Тайм-аут Cronjob с внутренней ошибкой сервера - PullRequest
0 голосов
/ 04 февраля 2011

Мой хостинг-провайдер позволяет мне запускать cronjob каждые 2 часа. Поскольку мне нужно, чтобы он запускался каждую секунду, я создал страницу, которая будет работать в течение 2 часов. Кроме того, я разработал с ZF; таким образом, страница должна быть загружена, что означает, что cronjob должен вызвать веб-адрес.

Пока мой bash-скрипт запускается каждые два часа:

#!/bin/bash

wget "http://www.mysite.co.za/ajax/cron"

Однако через несколько минут он останавливается со следующей ошибкой:

--2011-02-04 09:32:32--  http://www.mysite.co.za/ajax/cron
Resolving www.mysite.co.za... 123.40.97.157
Connecting to www.mysite.co.za|123.40.97.157|:80... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2011-02-04 09:37:33 ERROR 500: Internal Server Error

Я не знаю много о скриптах cronjobs / bash, но я думаю, что время истекло? Кто-нибудь может это подтвердить? Если это так, я загляну в curl_mutl_init, чтобы отправить ответ обратно и в то же время сохранить процесс - я не думаю, что у меня будет доступ к функциям управления процессом.

Если у кого-нибудь есть какие-либо советы / рекомендации, пожалуйста, не стесняйтесь.

Ответы [ 3 ]

1 голос
/ 04 февраля 2011

Несколько комментариев наблюдений:

1.Самозагрузка

Это не тот случай, когда задача ZF, использующая самозагрузку, должна проходить через HTTP-запрос.Вы можете запускать задачи командной строки, которые используют ваш загрузчик.

В вашем my_script.php - обычно помещенном в каталог scripts или в application/scripts - вы можете начать с большей части того же контента, что и у вашего веб-приложения.index.php file: check / set include_path, check / set APPLICATION_ENV, check / set APPLICATION_PATH и создание экземпляра вашего Zend_Application объекта.

Разница лишь в том, что вы звоните $application->bootstrap(), но не переходите к $application->run().На самом деле, поскольку некоторые из загруженных ресурсов могут понадобиться только для приложения web , вы можете позвонить:

$application     
    ->bootstrap('necessaryResource1')  
    ->bootstrap('necessaryResource2')
    ->bootstrap('necessaryResource3');`

, чтобы не загружать ненужные ресурсы.

Затем продолжайте выполнять специфику своей задачи.

2.Командная строка

Если вы хотите, чтобы ваш скрипт принимал параметры, вы можете использовать Zend_Console_GetOpt.Это довольно круто.

3.Раз в секунду?

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

Надеюсь, это поможет!

0 голосов
/ 04 февраля 2011

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

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

0 голосов
/ 04 февраля 2011

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

Вы также можете написать скрипт php со следующим кодом

непрерывный. Php:

while(true){
     sleep(1); //pause 1 second
     exec("wget http://youraddress.com");
}

bash-скрипт, чтобы увидеть, работает ли ваш php-скрипт

checkContinuous.sh

#!/bin/sh
#check if script is running
CHECK=`ps -ef |grep continuous.php`;
if [ -z "$CHECK" ]; then
#script not running, start it
   php /path/to/continuous.php& ; #start script and fork it
fi;

Надеюсь, это поможет!

...