➡️
Пока ты дочитаешь этот пост, в мире умрёт 100+ человек. И они никогда уже не узнают про Linux таймеры.
А ты узнаешь!Тыж всяко в курсе, что планировать регулярные таски в Linux можно не только через
cron и его форки, а еще и через
systemd + таймеры.
Каждый уважающий себя админ, пытается навязать мне эти таймеры. Мол, Роман ты заебал, нужно использовать таймеры, зачем тебе этот легаси
cron. На дворе 2024 год, нужно идти в ногу со временем.
Справедливо? Неа!Чтобы добавить таску в крон, мне потребуется секунд 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
Тип сервиса = камшот, сервис будет запущен один раз и завершится после выполнения задачи.
ExecStart = какой внешний Bash скрипт будем передёргивать.
WantedBy = не обращай внимания, это базовый таргет.
Теперь сам скрипт
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.
Но в большинстве случаев они избыточны.
Я остаюсь преданным крону, но таймеры выбрасывать на помойку не буду, авось когда-нибудь пригодятся.
Тему таймеров я затрагивал ранее в этом посте, в нем мы разбирали как с помощью sshfs надежно замонтировать сетевые диски, чтобы они не отваливались.
А ты используешь таймеры? Чо думаешь?
tags: #linux #bash@ВАSНDАYS | BАSHDАYS.CОM