Пока ты дочитаешь этот пост, в мире умрёт 100+ человек. И они никогда уже не узнают про Linux таймеры.
А ты узнаешь!
Ты ж всяко в курсе, что планировать регулярные таски в Linux можно не только через cron и его форки, а еще и через systemd + таймеры.
Каждый уважающий себя админ пытается навязать мне эти таймеры. Мол, Роман ты заебал, нужно использовать таймеры, зачем тебе этот легаси cron. На дворе 2024 год, нужно идти в ногу со временем.
Справедливо? Неа!
Сервис для задачи
Давай сделаем простой таймер. Для начала создадим сервис, который будет запускать 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.
Я остаюсь преданным крону, но таймеры выбрасывать на помойку не буду, авось когда-нибудь пригодятся.
А ты используешь таймеры? Чо думаешь?








Комментарии
Виджет комментариев загружается с серверов Telegram и может использовать cookies. Разрешите внешние сервисы, чтобы открыть обсуждение.