Как я могу запустить 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 на нем приведены некоторые примеры.
Что случилось с cron?
У вас есть несколько вариантов с cron - ваш php может быть вызван интерпретатором PHP командной строки, или вы можете использовать wget или fetch или эквивалент для вызова вашего PHP на сервере.
В общем, PHP, запускаемый из контекста веб-сервера, имеет ограничение по времени на то, как долго он может выполняться, поэтому в целом вы не можете настроить "фоновые" потоки PHP для выполнения "позже".