Linux — системы обычно вполне справляются со своими задачами которые надо выполнять периодически. Для этого практически в любом дистрибутиве есть CRON. С его помощью можно запускать задачи по расписанию в определенное время, периодически, под нужным пользователем и т.д. Но. У CRON есть ограничение. Он не умеет запускать задачи чаще раза в минуту. Можно конечно выкрутиться сделав запуск каждую минуту команды в которой указать sleep 10; перед запуском вашей команды. Таким образом вы получите через 6 минут — вереницу команд которые будут запускаться с интервалом в 10 секунд. Однако это не самое удобное и надежное решение. Тем более его будет сложно отслеживать и контролировать. Что же делать?
Изобретать велосипед? Зачем? Уже все изобрели до нас! 🙂 Можно использовать встроенный функционал SystemD. Для этого напишем два юнита:
# /etc/systemd/system/project-worker.service [Unit] Description=Runs worker Wants=project-worker.timer [Service] ExecStart=/usr/bin/php /path_to_worker [Install] WantedBy=multi-user.target # /etc/systemd/system/project-worker.timer [Unit] Description=Run project-worker every 10 seconds Requires=project-worker.service [Timer] Unit=project-worker.service OnCalendar=*:*:0/10 [Install] WantedBy=timers.target
Где первый юнит — /etc/systemd/system/project-worker.service — это юнит запускающий ваш скрипт или программу, а второй юнит /etc/systemd/system/project-worker.timer — это юнит который работает демоном и следит за таймером.
Секция что мы будем запускать:
[Service] ExecStart=/usr/bin/php /path_to_worker
Параметр — запускать раз в 10 секунд:
OnCalendar=*:*:0/10
В принципе это все. Дальше стандартные команды:
systemctl daemon-reload systemctl enable project-worker.timer systemctl start project-worker.timer
Поделиться ссылкой: