TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #357 10.8K
➡️ Пока ты дочитаешь этот пост, в мире умрёт 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
More from @bashdays
  1. Sep 24, 2026Post #1565
  2. Sep 24, 2026Траблшутинг - мастхэв компетенция для инженера В Rebrain траблшутинги проводят уже несколь…
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 23, 2026📣 GuardConf 2026 для тех, кто принимает решения о программных продуктах Как быстрее выпус…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →