Пока ты дочитаешь этот пост, в мире умрёт 100+ человек. И они никогда уже не узнают про Linux таймеры.

А ты узнаешь!

Ты ж всяко в курсе, что планировать регулярные таски в Linux можно не только через cron и его форки, а еще и через systemd + таймеры.

Каждый уважающий себя админ пытается навязать мне эти таймеры. Мол, Роман ты заебал, нужно использовать таймеры, зачем тебе этот легаси cron. На дворе 2024 год, нужно идти в ногу со временем.

Справедливо? Неа!

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Чтобы добавить таску в крон, мне потребуется секунд 15, а то и меньше. А чтобы провернуть это с таймерами, придется знатно упороться.

Сервис для задачи

Давай сделаем простой таймер. Для начала создадим сервис, который будет запускать bash скрипт.

Создаем файл /etc/systemd/system/bashdays.service

[Unit]
Description=Bashday service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/bashdays.sh

[Install]
WantedBy=multi-user.target

Теперь сам скрипт bashdays.sh

#!/bin/bash

unix_time=$(date +%s)
> /tmp/$unix_time

Скрипт будет создавать в папке tmp файл с именем равным Unixtime.

Проверяем:

systemctl daemon-reload
systemctl start bashdays
systemctl status bashdays

Всё, видим что все успешно отработало. А в папке tmp появился файл с именем 1713409747 (у тебя будет другое).

Таймер

Так. Теперь нужно сделать таймер, чтобы запускать сервис в нужные промежутки.

Уже начинаешь понимать в какой блуд заводят таймеры?

Создаем файл /etc/systemd/system/bashdays.timer

[Unit]
Description=Bashdays timer

[Timer]
OnCalendar=*:*:00

[Install]
WantedBy=timers.target

Срабатывает каждую минуту. Запускаем:

systemctl start bashdays.timer
systemctl status bashdays.timer

Видим: Active: running + Triggers: bashdays.service

Поздравляю, ты добавил одну таску в «крон» через таймеры. Теперь в папке tmp каждую минуту будут появляться файлы.

Но это еще не всё. Нужно добавить таймер в автозагрузку:

systemctl enable bashdays.timer

А вот теперь всё, можно перезагрузить сервер и файлы в tmp продолжат создаваться.

Теперь смотри, в одном большом интернет-магазине, у клиента в кроне подвешено около 150 скриптов. Ладно, не скриптов, дергается консольная ларавелька с нужными php параметрами. Не суть.

Ну дак вот! Ты будешь создавать 150 сервисов + 150 таймеров?

Да это ЕБОБО! 300 файлов! И всё это никак не группируются. Извините, но проще через нативный cron сделать.

Понятно дело, если у тебя 2 таски, то можно повыебываться с таймерами. Но для масштабных приключений, увы.

Тут либо автоматизацию пилить, либо ручками страдать.

Да, таймеры гибкие, это бест-практики, их можно тонко настраивать, их легче дебажить через journalctl -u bashdays.service.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Но в большинстве случаев они избыточны.

Я остаюсь преданным крону, но таймеры выбрасывать на помойку не буду, авось когда-нибудь пригодятся.

А ты используешь таймеры? Чо думаешь?