Гид по технологиям

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

• 4 min read • Linux • Обновлено 01 Dec 2025
Crontab в Ubuntu: планирование задач
Crontab в Ubuntu: планирование задач

Планирование задач на Ubuntu — иллюстрация

Что делает 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

Как создать задание для резервного копирования (пошагово)

  1. Откройте терминал (Ctrl+Alt+T).
  2. Редактируйте crontab пользователя:
crontab -e
  1. При первом запуске выберите редактор (например, нажмите 2 для nano).

Выбор редактора nano при первом запуске crontab

  1. Добавьте строку с расписанием и командой. Пример: сделать архив /home/ каждую неделю по понедельникам в 05:00:
# Еженедельное резервное копирование: понедельник в 05:00
0 5 * * 1 /usr/bin/tar -zcf /var/backups/home.tgz /home/ >> /var/log/backup.log 2>&1

Пример записи задания crontab в редакторе

  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

Мини‑процедура: добавить задание резервного копирования

  1. Протестировать tar‑команду вручную и убедиться, что создаётся /var/backups/home.tgz
  2. Открыть crontab -e
  3. Добавить строку:
0 5 * * 1 /usr/bin/tar -zcf /var/backups/home.tgz /home/ >> /var/log/backup.log 2>&1
  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) для ноутбуков и сложных сценариев.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро