Планирование задач в Ubuntu с помощью Crontab

Что делает Cron и зачем он нужен
Cron — это демон, который запускает команды по расписанию. Он эквивалентен Task Scheduler в Windows. С помощью Cron вы можете автоматизировать резервные копии, обслуживание, отправку отчётов и любые другие команды, которые должны выполняться по расписанию.
Кратко: Crontab — это таблица заданий cron. Каждый рядок содержит расписание и команду.
Основы формата задания Crontab
Ниже показано стандартное расположение полей в crontab:
m h dom mon dow user command
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── день недели (0–6) (0 — воскресенье, можно использовать имена)
│ │ │ └────────── месяц (1–12)
│ │ └─────────────── день месяца (1–31)
│ └──────────────────── час (0–23)
└───────────────────────── минута (0–59)Важно: в пользовательских crontab (когда вы редактируете через crontab -e) поле user отсутствует — оно используется в системных файлах /etc/crontab и файлах в /etc/cron.d/. Если вы хотите, чтобы задание выполнялось от имени root, откройте системный crontab или используйте sudo crontab -e.
Пояснения по полям:
- m — минута (0–59)
- h — час (0–23)
- dom — день месяца (1–31)
- mon — месяц (1–12)
- dow — день недели (0–6, 0 — воскресенье) или имена (Mon, Tue и т. п.)
- user — пользователь (только в /etc/crontab)
- command — команда или сценарий для запуска
Примеры расписаний и корректные строки
- Запуск каждый день в 05:00 (в пользовательском crontab):
0 5 * * * /usr/bin/your-command- Запуск каждый понедельник в 05:00 (в пользовательском crontab):
0 5 * * 1 /usr/bin/your-command- Запуск ежемесячно в полночь первого числа:
0 0 1 * * /usr/bin/your-command- Использование системного /etc/crontab с указанием пользователя (например, root):
0 5 * * 1 root /usr/bin/tar -zcf /var/backups/home.tgz /home/- Запись со сбором логов и выводом ошибок в файл лога:
0 5 * * 1 /usr/bin/tar -zcf /var/backups/home.tgz /home/ >> /var/log/backup.log 2>&1- Специальные сокращения (альтернативный синтаксис):
@reboot /path/to/script # запуск при старте системы
@daily /path/to/daily-job
@weekly /path/to/weekly-job
@monthly /path/to/monthly-job
@yearly /path/to/yearly-jobКак создать задание для резервного копирования (пошагово)
- Откройте терминал (Ctrl+Alt+T).
- Редактируйте crontab пользователя:
crontab -e- При первом запуске выберите редактор (например, нажмите 2 для nano).

- Добавьте строку с расписанием и командой. Пример: сделать архив /home/ каждую неделю по понедельникам в 05:00:
# Еженедельное резервное копирование: понедельник в 05:00
0 5 * * 1 /usr/bin/tar -zcf /var/backups/home.tgz /home/ >> /var/log/backup.log 2>&1
- Сохраните (в nano: Ctrl+O), затем выйдите (Ctrl+X).
Если нужно, чтобы задание выполнялось от root, выполните sudo crontab -e или поместите строку в /etc/crontab с указанием пользователя.
Полезные настройки окружения в crontab
Cron запускает команды в ограниченном окружении. Укажите переменные в начале файла crontab, чтобы избежать проблем:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.comБез правильного PATH многие команды не найдутся — используйте абсолютные пути к исполняемым файлам.
Отладка и проверка выполнения
- Проверьте логи cron: в Ubuntu обычно /var/log/syslog или через journalctl -u cron
- Выполните команду вручную от того же пользователя, что и в crontab
- Убедитесь, что скрипт исполняемый (chmod +x script.sh)
- Перенаправляйте stdout/stderr в лог для отладки (>> /var/log/your.log 2>&1)
Пример команды для проверки логов:
sudo grep CRON /var/log/syslog | tail -n 50
sudo journalctl -u cron --since "1 hour ago"Частые ошибки и решения
- Задание не запускается: проверьте PATH и используйте абсолютные пути.
- Скрипт запускается, но ничего не делает: cron использует /bin/sh по умолчанию; явно укажите SHELL=/bin/bash или добавьте в скрипт shebang (#!/bin/bash).
- Задание пропускается, потому что система была выключена: используйте anacron для задач, которые должны выполниться при следующем включении, или systemd timers.
- Неправильный формат расписания: проверьте поля и не забывайте ставить 5 полей для пользовательского crontab.
Альтернативы и когда использовать их
- systemd timers — современная альтернатива с гибкой конфигурацией и зависимостями сервисов.
- anacron — для нерегулярных систем (ноутбуки), гарантирует выполнение пропущенных задач при следующем запуске.
- at — для одноразового отложенного запуска команды.
Когда crontab не подходит: если вам нужна точная обработка зависимостей сервисов, сложная логика повторов или интеграция с systemd — выбирайте systemd timers.
Шаблон: быстрое руководство (чек-лист для администратора)
- Определить команду и протестировать вручную
- Использовать абсолютные пути ко всем исполняемым файлам
- Добавить перенаправление логов (stdout/stderr)
- Установить SHELL и PATH в начале crontab
- Убедиться в правах на выполнение сценария
- Для root‑задач — использовать sudo crontab -e или /etc/crontab
- Проверить выполнение в /var/log/syslog или через journalctl
Мини‑процедура: добавить задание резервного копирования
- Протестировать tar‑команду вручную и убедиться, что создаётся /var/backups/home.tgz
- Открыть crontab -e
- Добавить строку:
0 5 * * 1 /usr/bin/tar -zcf /var/backups/home.tgz /home/ >> /var/log/backup.log 2>&1- Сохранить и выйти; проверить логи после первого запуска.
Критерии приёмки
- Файл архива создаётся в /var/backups по расписанию
- Логи содержат записи о запуске и отсутствии ошибок
- Скрипт успешно выполняется вручную и через cron
FAQ — часто задаваемые вопросы
Q: Нужно ли указывать полный путь к tar?
A: Да, указывайте абсолютный путь (/usr/bin/tar), чтобы cron нашёл исполняемый файл.
Q: Выполнятся ли задания, если машина была выключена в момент запуска?
A: Нет. Для таких случаев используйте anacron или systemd timers.
Q: Как узнать, от какого пользователя выполняется задание?
A: В пользовательском crontab — от пользователя, который редактировал crontab. В /etc/crontab есть поле user.
Короткое резюме
Crontab — простой и надёжный способ автоматизировать задачи в Ubuntu. Всегда тестируйте команды вручную, используйте абсолютные пути и логирование, и помните про альтернативы (anacron, systemd timers) для ноутбуков и сложных сценариев.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента