Запуск заданий в Linux чаще раза в минуту

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

Поделиться ссылкой: