Как запустить скрипт PHP через определенный интервал (например, один раз в день)? - PullRequest
10 голосов
/ 14 мая 2009

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

Ответы [ 9 ]

12 голосов
/ 15 мая 2009

Я делал подобные вещи в прошлом, когда у меня не было доступа к 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());
    }
}
7 голосов
/ 15 мая 2009

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

3 голосов
/ 15 мая 2009

Вы также можете использовать Web Based Cron , если хотите попасть на сайт через определенный интервал времени.

2 голосов
/ 15 мая 2009

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

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

1 голос
/ 15 мая 2009

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

Вот один обход демона .

1 голос
/ 14 мая 2009

Вы можете использовать Cronjob . Затем вы можете запустить скрипт php из командной строки.

php /someplace/somefile.php

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

0  0  *  0  0  php /someplace/somefile.php
0 голосов
/ 19 сентября 2016

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

У меня была потребность в планировании годовых заданий, независимо от приложения (в случае перезагрузки системы или чего-то подобного), и мне было предложено использовать systemd Timers . На странице Arch Wiki приведено несколько примеров.

0 голосов
/ 15 мая 2009

Что не так с cron?

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

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

0 голосов
/ 14 мая 2009

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

...