Если у тебя есть VPS и ты всё ещё запускаешь бэкап вручную или не чистишь временные файлы, пока диск не заполнится — добро пожаловать в автоматизацию.
Когда-то я тоже начинала с классического
cron
systemd.timer
.timer
crontab
🧾 Что такое cron и зачем он нужен
cron
crontab
Пример: запуск скрипта каждые 5 минут:
*/5 * * * * /home/user/cleanup.sh
Плюсы:
- работает везде;
- мгновенно понятно, что и когда запускается;
- можно отредактировать через и забыть.
crontab -e
Минусы:
- нет логов по умолчанию (если не перенаправишь в файл — ты ничего не узнаешь);
- нет зависимостей — не знаешь, был ли интернет, была ли другая служба поднята;
- сложно отлаживать, если что-то пошло не так.
🚀 Что такое systemd.timer и как с ним жить
Если у тебя современная Ubuntu или Debian,
systemd
По сути,
systemd.timer
Хочешь пример?
# /etc/systemd/system/backup.service [Unit] Description=Nightly backup [Service] Type=oneshot ExecStart=/home/user/backup.sh
# /etc/systemd/system/backup.timer [Unit] Description=Run backup daily [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target
Запуск:
systemctl daemon-reexec systemctl daemon-reload systemctl enable --now backup.timer
Теперь скрипт будет выполняться каждый день в 3 ночи.
🧩 В чём плюсы systemd.timer
- Живые логи: можно посмотреть и узнать, что реально происходило.
journalctl -u backup.service
- Гибкое расписание: — запускай каждый понедельник.
OnCalendar=Mon *-*-* 07:00
- Можно запустить вручную (через ).
systemctl start your.service
- Автоматический перезапуск, если система была выключена во время плановой задачи (если ).
Persistent=true
🕵️ Где смотреть активные таймеры?
Всё просто:
systemctl list-timers
или
systemctl list-timers --all
Увидишь список: какой
.timer
🆚 Cron vs systemd — когда что использовать
Что нужно сделать | Что выбрать |
---|---|
Быстро раз в 5 минут вызвать скрипт | cron (простой случай) |
Хочешь логов и контроля | systemd.timer |
Зависит от других служб (nginx, mysql) | systemd.timer |
Нужно поведение «после перезагрузки» | systemd.timer с Persistent |
Запуск от конкретного пользователя | systemd user timer |
🔍 Как создать user timer (без sudo)
systemctl --user enable --now myscript.timer
Но не забудь —
systemd
.bashrc
export XDG_RUNTIME_DIR=/run/user/$(id -u)
🐛 Где я спотыкалась
- не добавила — таймер не сработал после перезагрузки;
Persistent=true
- забыла в
ExecStart=
— таймер работал, а команда — нет;.service
- названия и
.service
не совпадали — и таймер запускал «ничего»..timer
📝 Итого
Cron хорош, если тебе надо что-то простое и быстрое.
Но как только ты хочешь стабильности, логов и предсказуемости —
systemd.timer
Сейчас у меня на каждом VPS минимум 3 таймера: бэкап, очистка, обновления. Все на
systemd
Cron — остался только для привычных вещей вроде
letsencrypt