Быстрый способ запускать задачи в cron с шагом 30 секунд

Опубликовано 24 сент. 2025 г.

Как оказалось многие не знают, как нативным cron (без systemd timers) запускать скрипты с интервалом в 30 секунд, без модификации самого скрипта.

Все довольно просто и очевидно. Нужно сделать бутерброд.

ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ

Cron исторически работает только с минутной точностью. В crontab нельзя написать «каждые 10 секунд» или «раз в 30 секунд». Для этого обычно использую systemd timers или отдельный демонический скрипт с while true; sleep ...

В crontab строка запускается раз в минуту. Но внутри можно поставить sleep — задержку перед запуском. Таким образом мы получим несколько запусков в рамках одной минуты.

* * * * * /usr/local/sbin/bashdays.sh
* * * * * sleep 30; /usr/local/sbin/bashdays.sh
  1. Первая строка запускает скрипт в начале минуты (00:00, 00:01, 00:02…)

  2. Вторая строка — ждёт 30 секунд и запускает скрипт (00:00:30, 00:01:30, 00:02:30…).

Тут и получаем шаг в 30 секунд, именно через 2 вызова.

Костыльно? Ага! Но порой не хочется ебаться с таймерами и сделать все по-быстрому. Как вариант, вполне годный. Аналогично можно городить и другие интервалы.

Минусы подхода

  • Нет гарантии точности. Если первый запуск скрипта будет работать дольше, чем пауза (sleep), запуски могут наложиться.
  • Мусор в crontab. Для мелкого интервала надо плодить много строк.
  • Нет гибкой логики.

Где это реально полезно

  • Лёгкие скрипты мониторинга (ping, проверка статуса).
  • Хаотизация нагрузки (например, sleep $((RANDOM % 60)) для рассинхрона).
  • Если systemd timers или другие планировщики недоступны (например, в ограниченных окружениях или старых системах).

А как работать с таймерами ищи по тегу #systemd в моём телеграм канале, много про это писал.

Комментарии