Выполнять PHP-скрипт каждый день в разное время

1

У меня есть скрипт PHP, который выполняет запросы на сервере MYSQL, и я хочу выполнять его один раз в день!

В первый раз я сам запускаю сценарий. И я хочу, чтобы сценарий, в конце выполнения, выбирал случайное время в день, между 8:30 и 7:30 вечера, и автоматически переводил себя автоматически на следующий день, в это время. Является ли это возможным?

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

$tomorrow = new DateTime(date('Y-m-d H:m:s', time()+86400));
$tomorrow1 = $tomorrow -> setTime(8,30,0);
$tomorrow2 = $tomorrow -> setTime(19,30,0);

$min_time = strtotime($tomorrow1->format('Y-m-d H:m:s'));
$max_time = strtotime($tomorrow2->format('Y-m-d H:m:s'));
$rand_time = rand($min_time, $max_time);

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

sleep ($rand_time - time());

Но я не знаю, как после этого выполнить повторный сценарий. И я не думаю, что сон - лучшее решение. Вы, если есть способ и как это сделать?

  • 1
    Вы можете использовать cron для этой задачи. Запустите скрипт один раз и перед завершением скрипт должен проверить crontab, если текущий скрипт уже представил его список, и удалить скрипт, если это необходимо. И после этого снова добавьте скрипт в cron с новым временем выполнения.
  • 1
    Используете Linux? stackoverflow.com/questions/9049460/...
Показать ещё 3 комментария
Теги:
datetime

2 ответа

0

Подход, используемый, например, APT::Periodic заключается в том, чтобы начать работу в фиксированное время (в вашем случае 08:30) и сон в течение случайного периода времени в качестве первой команды на вашем задании (в вашем случае для $(($RANDOM % 39600)) секунд, если ваша оболочка - Bash).

Это позволяет избежать необходимости писать что-либо в crontab.

Я не знаю PHP, но думаю, что это будет выглядеть примерно так:

#/usr/bin/php
// Wait 0-11 hours before starting (invoked by cron at 0830)
sleep(rand(0, 39600));
// It now a time between 0830 and 1930

// rest of your code here

и ваш кронтаб был бы просто

30 8 * * * /path/to/my/script

Кроме того, не спите вообще в своем скрипте, но выполняйте спящий режим в команде crontab:

SHELL=/bin/bash
30 8 * * * sleep $(($RANDOM % 39600)) && /path/to/my/script

Это может быть предпочтительнее, если вам когда-либо понадобится выполнить скрипт вручную (и не хотите ждать до 11 часов для его запуска).

  • 0
    Спасибо за ответ! Что вы подразумеваете под APT :: Periodic? Это также работа cron, начинающаяся в 8:30 и спящая?
  • 0
    APT::Periodic - это функция менеджера пакетов aptitude , которая ежедневно загружает обновленные пакеты. Чтобы предотвратить перегрузку серверов архивации, все установки не должны использовать одно и то же время суток для выполнения своих обновлений. Таким образом, они запускаются в одно и то же время (для данного часового пояса системы), но ждут случайное время от 0 до 30 минут, прежде чем начать. Это не обязательно знать, чтобы понять мой ответ, поэтому я упустил детали. См UnaTTended Обновления на Debian Wiki для получения дополнительной информации , если вы хотите.
0

Хорошо, я могу использовать cron, но проблема все еще остается: мне нужно иметь возможность изменять планировщик задач на следующий день после самого самого php файла!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню