Как запускать работу cron за секунду каждые две минуты - PullRequest
0 голосов
/ 03 февраля 2011

Мне нужно настроить cron на хостинг-провайдере.

Эта задача cron должна выполняться каждую секунду. Это не интенсивно, просто делать проверку.

Однако хостинг-провайдер разрешает запускать задания cron каждые две минуты. (не могу изменить хостинг кстати)

Итак, я не знаю, как это сделать?

Мои мысли пока: Если он может работать только каждые две минуты, мне нужно, чтобы он работал каждую секунду в течение двух минут. 1) Как заставить мой скрипт работать в течение двух минут, выполняя функцию каждую секунду?

Но важно, чтобы не было перерывов. 2) Я должен убедиться, что он работает без сбоев и постоянно активен.

Может быть, я также могу попробовать запустить его навсегда и запускать задание cron каждые две минуты, проверяя, запущено ли оно? 3) Возможно ли это?

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

Спасибо за любой совет. Я использую ZF.

Ответы [ 2 ]

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

Подход № 3 является стандартным решением. Например, вы можете заставить задание cron прикасаться к файлу при каждом запуске. Затем при запуске вы можете проверить, был ли этот файл был недавно затронут, и если это так, немедленно завершите работу. Остальное беги. (Другие подходы включают использование блокировки файлов или запись pid в файл и при запуске проверка, существует ли этот pid и является ли он ожидаемой программой.)

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

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

Я не думаю, что cron позволяет разрешение второго уровня.http://unixhelp.ed.ac.uk/CGI/man-cgi?crontab+5

      field      allowed values
      -----      --------------
      minute         0-59
      hour       0-23
      day of month   1-31
      month      1-12 (or names, see below)
      day of week    0-7 (0 or 7 is Sun, or use names)

Таким образом, даже если ваш хостинг-провайдер позволяет, вы не можете запустить процесс, который повторяется каждую секунду.Однако вы можете использовать команду типа watch для повторного выполнения вашего скрипта.см здесь

...