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

Crontab в Linux: автоматизация задач

7 min read Linux Обновлено 08 Jan 2026
Crontab в Linux: автоматизация задач
Crontab в Linux: автоматизация задач

Автоматизация задач с помощью crontab в Linux

Что вы найдёте в этой статье

  • Быстрое определение crontab и зачем он нужен
  • Команды для просмотра и редактирования crontab
  • Формат строки задания и шаблоны расписаний
  • Практические примеры (оповещения, резервное копирование, проверка сайтов)
  • Руководство «безопасное добавление», чеклист для ролей, рекомендации по безопасности и отладке
  • Альтернативы, когда cron не подходит

Что такое Crontab?

Crontab (cron table) — это демон и формат конфигурационных файлов, который запускает команды по расписанию на большинстве Linux-систем. Один файл crontab хранит список заданий (job) для конкретного пользователя. Cron идеален для периодических задач: резервного копирования, отправки отчётов, проверки состояния сервисов и запуска фоновых обработок.

Определение термина: crontab — файл/утилита, которая запускает команды по времени.

Базовые команды crontab

Каждый пользователь имеет собственный crontab-файл. Основные команды:

  • crontab -l — показать все задания текущего пользователя.
  • crontab -e — отредактировать crontab текущего пользователя.
  • crontab -r — удалить все записи crontab текущего пользователя.

Чтобы работать с crontab другого пользователя, используйте опцию -u. Пример редактирования crontab пользователя jdoe:

sudo crontab -u jdoe -e

Совет: запускайте crontab -l перед изменением, чтобы сохранить текущий файл и избежать непреднамерённой потери расписания.

Формат задания crontab

Каждое задание — одна строка в формате:

MINUTE HOUR DAY MONTH WEEKDAY COMMAND

Таблица полей:

ЭлементДиапазонОписание
Minute0 - 59Минута выполнения.
Hour0 - 23Час выполнения (24-часовой формат).
Day1 - 31День месяца.
Month1 - 12Месяц (1 = Янв).
Weekday0 - 6День недели (0 = Воскресенье).
CommandЛюбая команда Linux, исполняемая в терминале.

Звёздочка (*) означает «каждый» для соответствующего поля. Пример: выполнить каждый день в 03:20:

20 3 * * * /root/backup.sh

Несколько значений и шаги

  • Список значений через запятую: 20,50 * * * * /path/to/command.sh — каждые 20 и 50 минут.
  • Шаги: 15 */3 * * * /path/to/command.sh — каждые 3 часа в 15 минут.
  • Диапазоны: 0 9-17 * * 1-5 /path/to/command.sh — по рабочим дням с 9 до 17 часов.

Пример подавления вывода

Чтобы вывод задания не попадал в системную почту, перенаправьте stdout и stderr:

0 6 15 * * /path/to/backup.sh > /dev/null 2>&1

Либо используйте переменную MAILTO в верхней части файла:

MAILTO=""

Как добавить задание

Команда crontab -e откроет ваш crontab в текстовом редакторе (обычно nano или vim). Каждое задание на новой строке. После сохранения файл автоматически активируется.

Пример редактирования:

crontab -e

Подсказка по nano: Ctrl+O — сохранить, Ctrl+X — выйти. Для vim: :wq

Быстрая вставка задания одной командой

Можно добавить строку без открытия редактора:

(crontab -l; echo "0 14 * * 0 /path/to/command.sh";) | crontab

Эта команда берёт текущее содержимое crontab, дописывает новую строку и загружает результат обратно. Всегда проверяйте вывод crontab -l, иначе можно нечаянно перезаписать crontab пустым файлом.

Просмотр и удаление

Показать задания:

crontab -l

Удалить все задания:

crontab -r

Чтобы удалить отдельную строку, отредактируйте (-e) и уберите её. Не злоупотребляйте -r на продуктивных системах.

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

Воспроизвести звук каждые два часа

0 */2 * * * aplay /home/myuser/myalert.wav

Плейлист на пятницу в 17:00:

0 17 * * 5 aplay /home/myuser/friday_song.mp4

Резервное копирование с rsync

Cron удобно запускает скрипты резервного копирования, которые используют rsync или tar. Важно всегда указывать абсолютные пути и проверять права доступа.

Проверка работоспособности сайтов (скрипт PHP)

Сохраните скрипт как /home/myuser/check_sites.php (в файл скрипта замените email и URL на свои). Затем добавьте:

*/5 * * * * /usr/bin/php /home/myuser/check_sites.php > /dev/null 2>&1

Код скрипта (как в оригинале):

 0) {  
mail($email, "Urgent - Sites Down!", "Your bot has detected the following sites are currently down:\n" . implode("\n", $down));  
}  
  
// Exit  
exit(0);  
  
  
/**  
* Check URL  
*/  
function check_url(string $url):int  
{  
  
// Send via cURL  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  
$response = curl_exec($ch);  
  
// Get status, and close connection  
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
curl_close($ch);  
  
// Return  
return $status;  
  
}  

Примечание: убедитесь, что PHP CLI установлен в /usr/bin/php или укажите корректный путь.

Советы по надёжному и безопасному использованию crontab

  • Всегда указывайте абсолютные пути к скриптам и бинарникам (/usr/bin/php, /usr/bin/rsync).
  • Задавайте в crontab переменные окружения (PATH, SHELL, MAILTO) вверху файла.
  • Логируйте выходы задач в файлы, а не в системную почту: /path/to/script.sh >> /var/log/myscript.log 2>&1.
  • Используйте блокировку, чтобы избежать одновременного запуска: flock -n /var/lock/myscript.lock /path/to/script.sh.
  • Не храните секреты (пароли, ключи) в скриптах; используйте менеджеры секретов или права доступа.

Отладка crontab — распространённые проблемы и как их решать

  • Пустой PATH: cron запускает оболочку с ограниченным PATH. Решение: в начале файла укажите PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.
  • Права доступа: cron выполняет команды от имени владельца crontab. Проверьте права на скрипты и файлы.
  • Различия окружения: добавьте SHELL=/bin/bash и экспорт нужных переменных.
  • Временные зоны и переход на летнее время: cron использует системный часовой пояс; учтите DST для критичных расписаний.
  • Конфликты параллельных запусков: используйте lock-файлы или системные механизмы.

Чеклист перед размещением задания в продакшн

  • Тестирование команды вручную в том же окружении, что и cron.
  • Указывание абсолютных путей для всех бинарников и файлов.
  • Перенаправление stdout/stderr в лог-файл.
  • Механизм блокировки для длительных задач.
  • Минимальные права у пользователя, запускающего задание.
  • Наличие мониторинга и алертов на неудачные запуски.

Рольные чеклисты

  • Для разработчика:

    • Писать скрипты идемпотентными (повторный запуск не ломает данные).
    • Логировать ошибки в понятный формат.
    • Обрабатывать таймауты и возвратные коды.
  • Для системного администратора:

    • Убедиться, что задания не конфликтуют по ресурсам.
    • Настроить ротацию логов (logrotate) для файлов cron.
    • Следить за правами и использованием сетевых ресурсов.
  • Для менеджера проекта:

    • Подтвердить требования к SLA/временным окнам.
    • Договориться о политике уведомлений и отката.

Когда cron не подходит и альтернативы

  • systemd timers — альтернатива с более точным управлением зависимостями и журналированием (хорошо для новых дистрибутивов, где используется systemd).
  • anacron — для задач, которые должны выполняться даже если система была выключена (ежедневные задания на ноутбуках/рабочих станциях).
  • at — для одноразовых задач.
  • fcron — более гибкая альтернатива для нестандартных систем.

Выбор: если нужна интеграция с systemd, используйте systemd timers; если важно выполнение при загрузке — anacron.

Шаблоны расписаний — шпаргалка

  • Каждую минуту: * * * * *
  • Каждые 5 минут: */5 * * * *
  • Каждый час в 0 минут: 0 * * * *
  • Каждый день в 03:30: 30 3 * * *
  • Каждый понедельник в 06:00: 0 6 * * 1
  • Первое число месяца в 04:00: 0 4 1 * *

Примеры безопасности и жёсткого харднинга

  • Запускать задания от пользователя с минимальными привилегиями.
  • Избегать использования root, если это не критично.
  • Устанавливать umask и проверять, какие файлы создаются.
  • Хранить логи в защищённой директории с ограниченным доступом.
  • Ограничивать сетевые права скриптов (например, использовать сетевые нейтральные контейнеры).

Частые ошибки и случаи, когда cron «подводит» (контрпримеры)

  • Скрипт работает в интерактивной сессии, но не в cron (чаще всего из-за PATH или переменных окружения).
  • Скрипт зависит от GUI или X-сессии.
  • Долгие задания перекрывают друг друга и создают нагрузку.
  • Отправка писем на внешние адреса блокируется политикой почтового сервиса.

Мини-методология: безопасное добавление задания

  1. Написать и протестировать скрипт вручную.
  2. Добавить логирование и обработку ошибок.
  3. Запустить скрипт через cron с перенаправлением вывода в лог.
  4. Проверить выполнение несколько раз и настроить оповещения.
  5. Включить мониторинг успешных/неуспешных запусков.

Пример playbook: развернуть резервное копирование

  1. Написать /usr/local/bin/backup.sh, указывая абсолютные пути и set -e.
  2. Тестировать скрипт вручную, проверять права доступа к удалённому серверу.
  3. Добавить в crontab:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  1. Настроить logrotate для /var/log/backup.log.
  2. Добавить алертинг (например, уведомление в Slack или почту при ошибке).

Критерии приёмки

  • Задание успешно отрабатывает в crontab минимум три раза подряд.
  • Логи содержат минимально достаточную информацию для диагностики.
  • Нет конфликтов с другими задачами по ресурсам.
  • Документация задания и контакт ответственного доступны команде.

Короткие шаблоны (cheat sheet)

  • Быстро проверить crontab текущего пользователя: crontab -l
  • Редактировать: crontab -e
  • Удалить все: crontab -r
  • Добавить строку не открывая редактор: (crontab -l; echo "SCHEDULE COMMAND";) | crontab

Итог

Crontab — надёжный инструмент для регулярной автоматизации задач в Linux. Он прост в использовании, но требует внимательности: абсолютные пути, управление окружением, логирование и блокировка — ключевые практики для стабильной работы. Для сложных сценариев рассмотрите systemd timers или anacron. Не забывайте про безопасность, права и мониторинг.

Важно: перед развёртыванием в продуктиве протестируйте задания и настройте оповещения.


Краткое резюме:

  • Crontab позволяет запускать команды по расписанию;
  • Используйте crontab -e/-l/-r и абсолютные пути;
  • Логируйте и обрабатывайте ошибки; блокируйте параллельные запуски;
  • Рассмотрите альтернативы, если нужна интеграция с systemd или выполнение при пропуске расписания.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство