Запустить команду через n-ное время

222
14 мая 2018, 18:50

Реализовал у себя на сайте алгоритм выполнения снапшотов. Работает следующим образом: при запросе робота одной из поисковых систем алгоритм проверяет дату создания файла снапшота. Если файл устарел (с момента создания прошло 30 дней), то PHP запускает командой exec() NodeJS-скрипт, который обновляет файл снапшота. Проблема в том, что на создание снапшота Нода тратит 3-5 секунд, что не нравится роботу вот совсем. Поэтому единственный способ это исправить, который я смог придумать, это отдавать роботу текущий снапшот, после чего запустить асинхронное отложенное выполнение скрипта. То есть, просто вернуть роботу снапшот (удовлетворив его требование к скорости загрузки страницы). После чего сделать запись в crontab, мол, нужно выполнить команду на выполнение снимка страницы такого-то числа в такое-то время от имени пользователя www-data. Теперь вопрос: во-первых, умеет ли crontab выполнять команды не только с определённым интервалом, а в заданное время и дату? Во-вторых, выполнит ли crontab задачу под пользователем www-data? И в-третьих, может ли crontab удалять запись после выполнения или придется через php открывать файл, искать там нужную запись и стирать её? Спасибо.

Answer 1
  1. умеет ли crontab выполнять команды не только с определённым интервалом, а в заданное время и дату?

    нет, конечно. crontab — это формат файла, понимаемый программой cron.

    дополнение: формат файла crontab позволяет указывать время, день недели, день месяца, месяц.

  2. выполнит ли crontab задачу под пользователем www-data?

    см. предыдущий пункт.

    с дополнением: программа cron работает обычно от имени пользователя root, следовательно может запускать процессы с понижением привилегий.

  3. может ли crontab удалять запись после выполнения?

    см. первый пункт.

    с дополнением: нет, в функциональность программы cron не заложено никаких манипуляций с файлами формата crontab.

  4. или придется через php открывать файл, искать там нужную запись и стирать её?

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

READ ALSO
Повторяющий html при обработке данных

Повторяющий html при обработке данных

Вот, есть такой javascript код:

188
Вывод данных из БД с сравнением PHP и MySQL

Вывод данных из БД с сравнением PHP и MySQL

Помогите вывести значения из таблицыперед этим сравнив их

203
foreach возвращает дважды результат

foreach возвращает дважды результат

сообществоНе пойму то ли баг, то ли фича

185
Laravel Выборка записей из БД с пробелом

Laravel Выборка записей из БД с пробелом

В базе хранится запись Мобильные телефоныТак вот, при выборке и подстановке в атрибут value Ларавель оборачивает первое слово в кавычки - "Мобильные",...

167