php time_sleep_until () и «сервер Mysql ушел» - PullRequest
3 голосов
/ 22 июля 2010

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

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

чтобы выполнить скрипт, я должен использовать задание cron для запуска каждую минуту, чтобы проверить время в массиве. к сожалению, мой веб-хостинг позволяет только 5 минут как минимальный интервал. поэтому каждый раз, когда вызывается скрипт, я проверяю, находятся ли значения в массиве между $current_time и $current_time + (4*60) // 4 minutes. если это так, и если нужно, я использую time_sleep_until для задержки сценария, пока время не достигнет значения, найденного в массиве.

поэтому, если мой скрипт выполняется в 10:05 и значение в массиве равно 10:06, я оставляю сценарий в спящем режиме до 10:06, прежде чем он продолжит выполняться. однако, если время сна больше минуты или около того, я получаю Mysql server gone away.

как я могу предотвратить это? или есть лучший способ сделать это?

спасибо!

1 Ответ

3 голосов
/ 22 июля 2010

Пара вариантов, что лучше я не знаю.

Во-первых, убедитесь, что ваш скрипт работает с CLI, и по истечении этой минуты вызовите его с помощью функции http://www.php.net/exec (если ваш хост позволяет это).

Во-вторых, это установка скрипта с возможным хэшем в качестве ключа и использование перенаправления заголовка после истечения минуты, это будет называть скрипт совершенно новым, чтобы установить новое соединение MySQL.

Третий вариант - настроить скрипт, как в двух, за исключением настройки на вашем компьютере задания по расписанию / задания cron, которое открывает эту страницу (она должна быть в webroot) и вызывает ее каждую минуту или как вам угодно.Это не установленный метод, но зависит от того, на сколько стоит ваш компьютер.

В-четвертых, аналогично третьему, но используйте бесплатный хостинг cron, например: http://www.onlinecronjobs.com/en

Надеюсь, что это поможет.Если я подумаю о других вариантах, я буду обновлять.

...