Как я могу запустить PHP-скрипт в определенном интервале (например, один раз в день)?

У меня есть php-скрипт, который читает один файл через http (файл находится в другом домене). Я хотел бы читать этот файл только один или два раза в день, а не подключаться к нему каждый раз, когда сайт обновляется. есть ли другой способ, кроме как сделать это с cron? Я не хочу использовать cron, потому что я предпочитаю настроить такое поведение в самом скрипте .. поэтому он гибкий, поэтому я могу использовать его в любом месте, не настраивая cron каждый раз. спасибо

9 ответов


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


Я делал такие вещи в прошлом, когда у меня не было доступа к cron:

$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
    $lastRun = file_get_contents($lastRunLog);
    if (time() - $lastRun >= 86400) {
         //its been more than a day so run our external file
         $cron = file_get_contents('http://example.com/external/file.php');

         //update lastrun.log with current time
         file_put_contents($lastRunLog, time());
    }
}

вы также можете использовать Веб-Cron Если вы хотите попасть на сайт на временной интервал.


вы даже можете использовать таблицу базы данных-очень простую по структуре, идентификатору, дате, url-адресу скрипта и всему, что вам нужно, - и добавлять строку каждый раз при запуске скрипта.

затем, перед запуском скрипта просто проверьте номера строк для каждого дня у вас есть.


можно использовать Cronjob. Затем вы можете запустить PHP скрипт через командную строку.

php /someplace/somefile.php

Cronjob будет следующим, Если вы обновляете каждый день.

0  0  *  0  0  php /someplace/somefile.php

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

вот демон walk-through.


Если вы используете дистрибутив Linux с systemd:

Мне нужно было планировать ежегодные задания, независимые от приложения (в случае перезагрузки системы или чего-то подобного), и мне было предложено использовать таймеры systemd в. Арка!--5-->Страница Wiki на нем приведены некоторые примеры.


Если вы находитесь в среде *nix, вы можете использовать задания cron


Что случилось с cron?

У вас есть несколько вариантов с cron - ваш php может быть вызван интерпретатором PHP командной строки, или вы можете использовать wget или fetch или эквивалент для вызова вашего PHP на сервере.

В общем, PHP, запускаемый из контекста веб-сервера, имеет ограничение по времени на то, как долго он может выполняться, поэтому в целом вы не можете настроить "фоновые" потоки PHP для выполнения "позже".