cron запускает команды по расписанию: бэкапы, очистку временных файлов, отчёты. Он есть в Ubuntu и Debian из коробки.
Редактирование расписания
$ crontab -e$ crontab -lУ каждого пользователя свой crontab. Задачи, которым нужны права root, добавляйте через sudo crontab -e.
Формат строки
Пять полей времени и команда: минута, час, день месяца, месяц, день недели (0 или 7 — воскресенье).
| Расписание | Когда выполняется |
|---|---|
| */5 * * * * | каждые 5 минут |
| 0 3 * * * | каждый день в 03:00 |
| 30 2 * * 1 | по понедельникам в 02:30 |
| 0 4 1 * * | первого числа каждого месяца в 04:00 |
| @reboot | один раз после загрузки системы |
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Окружение cron
cron запускает команды с минимальным PATH и без переменных из вашего .bashrc. Поэтому скрипт, который работает в терминале, может молча падать по расписанию. Пишите полные пути к программам или задайте PATH первой строкой crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binГде смотреть, что задача выполнилась
$ journalctl -u cron --since todayНа Ubuntu записи cron также попадают в /var/log/syslog. На Debian 12 rsyslog по умолчанию не установлен, поэтому смотрите журнал systemd. Вывод самой задачи сохраняйте в файл, как в примере выше, иначе он пропадёт.
Альтернатива: таймер systemd
Таймер удобнее, когда важно видеть логи задачи в journalctl, не запускать её дважды параллельно и выполнить пропущенный запуск после простоя. Нужны два файла — служба и таймер:
[Unit]Description=Nightly backup[Service]Type=oneshotExecStart=/usr/local/bin/backup.sh[Unit]Description=Run backup every night[Timer]OnCalendar=*-*-* 03:00:00Persistent=true[Install]WantedBy=timers.target$ systemctl daemon-reload$ systemctl enable --now backup.timer$ systemctl list-timersПроверьте результат
Временно поставьте расписание на ближайшие минуты (*/2 * * * *), дождитесь запуска и проверьте лог задачи. Для таймера запустите службу вручную: systemctl start backup.service, затем journalctl -u backup.service. Потом верните нормальное расписание.