Как работает crontab?

У меня два вопроса.
Можно ли поставить крон на 1 минуту и проверять есть ли задание, для скрипта, в бд и если есть выполнять его, а это не быстро? В основном интересует нагрузка на сервер.
И что будет если в одно время, через крон, несколько раз обратиться к одному скрипту, не получится, что запросы будут конфликтовать друг с другом?
  • Вопрос задан
  • 648 просмотров
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
> Можно ли поставить крон на 1 минуту
Можно.

> и проверять есть ли задание, для скрипта, в бд
Можно.

> и если есть выполнять его,
Можно

> а это не быстро?
А это не вопрос.

> В основном интересует нагрузка на сервер.
От крона нагрузка будет несущественная. От вашего скрипта - зависит от вашего скрипта.

> И что будет если в одно время, через крон, несколько раз обратиться к одному скрипту
Скрипт будет выполнен несколько раз.

> не получится, что запросы будут конфликтовать друг с другом?
Если вы эту ситуацию обработаете в своём скрипте, то не будут. В кроне никаких встроенных механизмов для этого нет.
Ответ написан
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
что запросы будут конфликтовать друг с другом?

Конечно получится. Race-condition получить запросто, потому что крон - простейшая и тупейшая программа. Все, что она умеет - разобрать строку, где указывается частота запуска и запустить процесс. А работа запущенного процесса - это не его проблема. Навесить очередь из сотни скриптов или развалить к хренам БД - как здрассьте.
Вам лучше не насиловать крон, а демона написать, который сам будет проверять наличие задания для него и сам делать все блокировки.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Можно ли поставить крон на 1 минуту и проверять есть ли задание, для скрипта, в бд и если есть выполнять его, а это не быстро? В основном интересует нагрузка на сервер.

Легко

И что будет если в одно время, через крон, несколько раз обратиться к одному скрипту, не получится, что запросы будут конфликтовать друг с другом?

Сделайте блокировку в скрипте. Стандартный вариант - создавать pidfile, с номером текущего процесса. Другой экземпляр скрипта перед тем как выполнять тяжелую задачу, первым делом проверяет что существует pidfile, вторым проверяет что процесс который указан в pidfile существует - и если все верно, завершает работу. Если нет - создает собственный pidfile и начинает выполнять "тяжелый" запрос.

Вместо Pidfile можно использовать любой другой механизм, подходящий вашему языку/стеку.

Таким образом легко решается задача, чтобы проверка запускалась раз в минуту и скрипты друг друга не лочили.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
RecruitIT Москва
от 100 000 до 160 000 ₽
Сбер Москва
До 240 000 ₽
RecruitIT Москва
от 120 000 до 150 000 ₽