Запускаем скрипт по расписанию через systemd timer!
Cron удобен, но в systemd есть свой способ запускать задачи по расписанию. Он хорошо дружит с логами journalctl, статусами юнитов и обычной системой сервисов.
Пусть есть простой скрипт обслуживания:
/opt/jobs/cleanup.sh
Сначала сделаем его исполняемым:
sudo chmod +x /opt/jobs/cleanup.sh
Теперь создадим service-unit. Именно он описывает, что запускать:
sudo nano /etc/systemd/system/cleanup.service
Минимально нужен тип oneshot:
Type=oneshot
Команду запуска указываем отдельно:
ExecStart=/opt/jobs/cleanup.sh
Теперь создаём timer-unit:
sudo nano /etc/systemd/system/cleanup.timer
Например, ежедневный запуск можно описать так:
OnCalendar=daily
Если сервер был выключен во время расписания, полезен Persistent:
Persistent=true
После создания файлов перечитываем конфигурацию systemd:
sudo systemctl daemon-reload
Включаем таймер:
sudo systemctl enable --now cleanup.timer
Проверить расписание можно так:
systemctl list-timers cleanup.timer
А логи последнего запуска смотрятся через journalctl:
journalctl -u cleanup.service
Service отвечает за действие, timer отвечает за расписание. Поэтому одну и ту же задачу можно запускать вручную, по расписанию и удобно проверять через стандартные инструменты systemd.
➡️ DevOps Ready | #практика
Cron удобен, но в systemd есть свой способ запускать задачи по расписанию. Он хорошо дружит с логами journalctl, статусами юнитов и обычной системой сервисов.
Пусть есть простой скрипт обслуживания:
/opt/jobs/cleanup.sh
Сначала сделаем его исполняемым:
sudo chmod +x /opt/jobs/cleanup.sh
Теперь создадим service-unit. Именно он описывает, что запускать:
sudo nano /etc/systemd/system/cleanup.service
Минимально нужен тип oneshot:
Type=oneshot
Команду запуска указываем отдельно:
ExecStart=/opt/jobs/cleanup.sh
Теперь создаём timer-unit:
sudo nano /etc/systemd/system/cleanup.timer
Например, ежедневный запуск можно описать так:
OnCalendar=daily
Если сервер был выключен во время расписания, полезен Persistent:
Persistent=true
После создания файлов перечитываем конфигурацию systemd:
sudo systemctl daemon-reload
Включаем таймер:
sudo systemctl enable --now cleanup.timer
Проверить расписание можно так:
systemctl list-timers cleanup.timer
А логи последнего запуска смотрятся через journalctl:
journalctl -u cleanup.service
Service отвечает за действие, timer отвечает за расписание. Поэтому одну и ту же задачу можно запускать вручную, по расписанию и удобно проверять через стандартные инструменты systemd.
➡️ DevOps Ready | #практика