Глиф Учебники

Запуск по расписанию: cron и crontab

Справочник · Ubuntu · 2 минуты чтения

Откройте своё расписание:

Bash
crontab -e

При первом запуске команда предложит выбрать редактор — проще всего nano. Допишите в конец файла строку задания, сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X):

Текст
30 3 * * * /home/ivan/backup.sh >> /home/ivan/backup.log 2>&1

Это значит: каждый день в 3:30 запускать /home/ivan/backup.sh, а всё, что он выводит, дописывать в backup.log. Посмотреть своё расписание — crontab -l.

Формат строки

Пять полей времени через пробел, затем команда:

ПолеЗначения
минута0–59
час0–23
день месяца1–31
месяц1–12
день недели0–7 (0 и 7 — воскресенье, 1 — понедельник)

* — любое значение, */10 — каждое десятое, 1-5 — диапазон, 1,15 — список.

Строка времениКогда
*/5 * * * *каждые 5 минут
0 * * * *каждый час, в 00 минут
0 9 * * 1-5в 9:00 по будням
0 0 1 * *в полночь первого числа каждого месяца
@rebootодин раз при запуске системы
@dailyраз в сутки, в полночь

Время — по часовому поясу системы. Как его проверить и сменить — в справке Как сменить часовой пояс и настроить время.

Пример скрипта

Файл /home/ivan/backup.sh (создайте его в nano):

Bash
#!/bin/bash
mkdir -p /home/ivan/backup
tar -czf "/home/ivan/backup/docs-$(date +%F).tar.gz" /home/ivan/Документы

Скрипт складывает папку документов в архив с датой в имени. Сделайте его исполняемым и проверьте вручную, прежде чем ставить в расписание:

Bash
chmod +x /home/ivan/backup.sh
/home/ivan/backup.sh

Почему задание не срабатывает

Запуски заданий видны в журнале:

Bash
journalctl -u cron --since today

Задания root и системные

crontab -r удаляет всё расписание сразу и без вопросов, а на клавиатуре r стоит рядом с e. Перед правками полезно сохранить копию: crontab -l > ~/crontab-copy.txt.

Вместо cron можно использовать таймеры systemd — они пишут вывод в журнал сами и умеют догонять пропущенные запуски. Для простых заданий cron проще.