Ответ
Таймеры (.timer) в systemd — это юниты для планирования задач, современная и более мощная альтернатива cron. Они предназначены для активации других юнитов (обычно сервисов — .service) по расписанию или по событию.
Ключевые преимущества перед cron:
- Интеграция с системой: Полная интеграция с journald для структурированного логирования, управление через
systemctl. - Зависимости: Могут использовать систему зависимостей systemd (например, запускать задачу только после монтирования определённого раздела).
- Гибкое расписание: Поддержка календарных выражений (например,
Mon..Fri), относительных интервалов и активации по событию загрузки. - Persistent mode: Опция
Persistent=trueгарантирует выполнение пропущенной задачи при следующем запуске системы.
Пример: Ежедневное резервное копирование
-
Сервис (
/etc/systemd/system/backup.service): Определяет что выполнять.[Unit] Description=Database backup job [Service] Type=oneshot ExecStart=/usr/local/bin/backup-script.sh User=backup-user -
Таймер (
/etc/systemd/system/backup.timer): Определяет когда выполнять.[Unit] Description=Run backup daily at 2 AM [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target -
Активация и управление:
# Включить таймер для автозапуска sudo systemctl enable backup.timer # Запустить таймер немедленно sudo systemctl start backup.timer # Просмотр статуса и следующего времени срабатывания systemctl status backup.timer # Просмотр логов выполнения задачи journalctl -u backup.service
Типичные сценарии в DevOps: планирование очистки логов, запуск синхронизации конфигураций, выполнение периодических health-чеков и отправка метрик.
Ответ 18+ 🔞
А, слушай, про таймеры в systemd! Это же, блядь, такая штука, которая cron на бобах обыгрывает, ёпта. Представь себе: cron — это как старый дедок с костылями, который по расписанию бубнит одно и то же, а systemd timer — это уже современный робот-уборщик, который не только пылесосит, но и логи пишет красиво, и если ты проспал — он тебе напомнит. Ебать мои старые костыли, какая разница!
Чем они, сука, круче старого крона:
- В системе как дома: Всё через
systemctlкрутишь, логи вjournalctl— красота, а не жизнь. Никаких писюлек сcrontab -e, где запятую не там поставил — и всё, пизда рулю, задача не работает, а ты и не знаешь почему. - Умные зависимости: Можешь заставить задачу стартануть только после того, как нужный диск примонтируется. У крона с этим, конечно, пиздец — он тупо попробует и сольёт в ошибку, если диск не готов.
- Гибкое расписание: Тут тебе и "каждый будний день", и "раз в неделю", и "через 15 минут после загрузки". Cron, конечно, тоже не дурак, но тут как-то... элегантнее, что ли.
- Persistent mode — просто песня: Если комп в 2 ночи был выключен, а задача должна была в это время запуститься, то при следующем включении она всё равно выполнится. У крона, понятное дело, доверия ебать ноль — пропустил время, и хуй с горы, считай, день потерян.
Пример: Делаем ежедневный бэкап, чтобы не охуеть потом
-
Сервис (
/etc/systemd/system/backup.service): Тут мы описываем, что делать. Типа, сам скрипт.[Unit] Description=Database backup job [Service] Type=oneshot ExecStart=/usr/local/bin/backup-script.sh User=backup-userВсё просто: запусти разовый скрипт от имени специального юзера.
oneshot— значит, запустился, отработал, завершился. Никаких демонов. -
Таймер (
/etc/systemd/system/backup.timer): А вот это — когда делать. Самое интересное.[Unit] Description=Run backup daily at 2 AM [Timer] OnCalendar=*-*-* 02:00:00 # Каждый день в 2 ночи. Можно и "Mon..Fri", если только по будням. Persistent=true # Вот эта волшебная фигня! Если проспал — выполнится позже. [Install] WantedBy=timers.target -
Запускаем эту банду:
# Разрешаем таймеру стартовать при загрузке sudo systemctl enable backup.timer # Запускаем его прямо сейчас (он сам будет спать до 2 ночи) sudo systemctl start backup.timer # Смотрим, жив ли он и когда следующий пиздёж systemctl status backup.timer # Там будет строчка "Trigger: ..." — следующее срабатывание. # А если что-то пошло не так, смотрим логи самого скрипта journalctl -u backup.service
Где это в DevOps впаривают? Да везде! Очистка старых логов, чтобы места не жрали овердохуища, синхронизация конфигов между серваками, какие-нибудь периодические проверки здоровья сервисов. В общем, вещь, блядь, must have, а не "надо бы попробовать". Хуй с винтом, что cron проще — тут надёжнее и контролировать удобнее.