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

    Команда Simple-Server
    03.06.2026
    9 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    В большинстве Linux-дистрибутивов компонент Cron уже установлен по умолчанию. Но если в вашей системе это не так, это легко можно сделать вручную. Для этого сначала нужно обновить локальный индекс пакетов в системе, а затем установить непосредственно cron в Ubuntu.

    sudo apt update sudo apt install cron

    Основная функция Cron — регулярное выполнение скриптов в фоновом режиме. Поэтому после установки нужно убедиться, что служба будет запускаться автоматически при старте системы. Для этого воспользуемся командой:

    sudo systemctl enable cron

    Проверить статус можно с помощью:

    sudo systemctl status cron

    Вы должны увидеть подобный вывод:

    ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2026-01-25 15:01:47 UTC; 5h 11min ago Docs: man:cron(8) Main PID: 636 (cron) Tasks: 1 (limit: 1099) Memory: 492.0K CPU: 233ms CGroup: /system.slice/cron.service └─636 /usr/sbin/cron -f -P

    В строке Loaded должен быть статус enabled, а в ActiveActive (running). Это значит, что служба запущена и работает, а также добавлена в автозагрузку.

    Теперь давайте разберемся, как планировать задачи в cron.

    Фактически все задачи записываются в файл /etc/crontab, в нем хранится и расписание, и непосредственно скрипты. Кроме этого, в файл можно добавлять служебные параметры — почту, оболочку, переменные среды и так далее. Задачи, добавленные каждым пользователем системы, хранятся в /var/spool/cron/crontabs/.

    При ручном добавлении задания в /etc/crontab в строке нужно обязательно указать имя пользователя, от которого будет запущено задание.

    Если задание добавляется командой crontab -e, задание будет записано в /var/spool/cron/crontabs/ под именем пользователя, который выполнил команду.

    Каждое задание добавляется с новой строки, а для того, чтобы задать расписание, используется специальный несложный синтаксис. Строка условно делится на две части — настройки регулярности выполнения и непосредственно скрипт.

    Для того, чтобы временно отключить выполнение задачи, достаточно просто закомментировать ее с помощью символа # в начале строки.

    Расписание — это пять полей, разделенных пробелами: минута (0–59), час (0–23), день (1–31), месяц (1–12, jan–dec), день недели (0–6, sun–mon). Для того чтобы задавать регулярность выполнения задач, существуют специальные символы, которые значительно упрощают постановку задач Cron.

    1. * — символ подстановки, он представляет все значения. То есть, если вместо конкретных минут написать *, тогда скрипт будет выполняться ежеминутно.
    2. , используется для создания списка. Если нужно запускать скрипт два раза в сутки, не нужно создавать две записи. Вместо этого в поле «часы» достаточно написать, например, 5,10, и скрипт будет выполняться два раза — в пять и в десять часов.
    3. - — задает диапазон значений. Если по каким-то причинам вы хотите, чтобы ваш скрипт исполнялся только во второй половине недели, то достаточно написать в соответствующем поле 4-7 .
    4. / обозначает шаг. Так, чтобы запускать скрипт каждые два часа в сутки, не нужно создавать 12 записей — достаточно просто написать */2. Но в качестве шага можно использовать только те числа, которые делят диапазон поровну, иначе скрипт не будет запускаться.
    • * * * * * — каждую минуту
    • */15 2-12 * * * — каждые 15 минут, с 2 до 12 часов
    • 30 23 * * * — каждый день в 23:30
    • 1,55 */12 * 1-6 * — в 1 и 55 минуту часа два раза в сутки, но только первые полгода.

    Чтобы упростить процесс создания задач, в последних версиях современных дистрибутивов в компоненте Cron предусмотрены самые частые наборы переменных расписания:

    • @reboot — задача выполняется только при загрузке системы, обычное расписание не предусматривает такой сценарий
    • @yearly — задача выполняется один раз в год (синоним — @annualy)
    • @monthly — скрипт запускается раз в месяц
    • @daily — скрипт выполняется ежедневно (синоним — @midnight)
    • @hourly — скрипт выполняется каждый час

    Кроме того, в дистрибутивах, начиная с Ubuntu 20.04, помимо задач прописан еще и запуск утилиты run-parts. Эта утилита отвечает за выполнение скриптов из следующих каталогов:

    • /etc/cron.minutely — скрипты, которые должны выполняться каждую минуту
    • /etc/cron.hourly — скрипты, которые должны выполняться каждый час
    • /etc/cron.daily — скрипты, которые должны выполняться ежедневно
    • /etc/cron.weekly — скрипты, которые должны выполняться каждую неделю
    • /etc/cron.monthly — скрипты для ежемесячного запуска.

    В файле /etc/crontab использование утилиты run-parts не отличается от обычных задач и выглядит примерно так:

    # run-parts 01 * * * * root run-parts /etc/cron.hourly 01 23 * * * root run-parts /etc/cron.daily 0 23 * * 0 root run-parts /etc/cron.weekly 20 23 * * * root run-parts /etc/cron.monthly

    Для тех, кто только начинает знакомиться с синтаксисом планировщика crontab, советуем при создании записей пользоваться сервисом crontab.guru.

    С помощью демона Cron вы можете исполнять любые скрипты так, будто вы находитесь в консоли. Например, для того, чтобы регулярно писать строку в файл, просто добавьте к расписанию команду для выполнения. Получится такое cron-выражение:

    * * * * * /bin/echo "test string" >> /home/user/cron.log

    Но если вам нужно, чтобы скрипт выполнялся в фоне, нужно перенаправить его вывод в пустую директорию /dev/null. Представим, что нам нужно регулярно обрабатывать таблицу с транзакциями, чтобы проверять статусы платежей пользователей. Для этого у нас написан скрипт на PHP. Тогда в cron добавим следующую запись

    */10 * * * * /usr/bin/php /var/www/example.com/billing/proccessing-handler.php > /dev/null

    В этой строке cron каждые 10 минут исполняет PHP-скрипт processing-handler.php, но сохраняет только ошибки. Отметим, что скрипт будет корректно работать только при условии, что на сервере установлен интерпретатор PHP.

    Задачи cron запускаются от того пользователя, от которого они были добавлены в crontab. Это одна из самых распространенных ошибок при создании заданий. Часто скрипт нужно выполнять от пользователя root, но в crontab запись была сделана рядовым пользователем.

    Как запланировать задачи в Ubuntu

    Хоть crontab — это просто файл, изменять его напрямую не рекомендуется. Вместо этого нужно использовать команду crontab -e . Это позволит избежать ошибок синтаксиса или проблем с правами на файл. Настройка cron — по сути и есть просто редактирование файла с помощью вашего любимого текстового редактора, его вы сможете выбрать при первом запуске или с помощью команды select-editor.

    В появившемся окне внесите свое расписание задач, каждое с новой строки. После добавления всех необходимых строк просто сохраняем изменения и закрываем редактор. Задача начала регулярно выполняться.

    Для того, чтобы посмотреть, какие задачи выполняются, нужно прочитать файл. Существует много способов посмотреть содержимое файла —с помощью любого текстового редактора, команды cat или crontab -e. Но помимо этого вы можете воспользоваться специальной командой crontab -l.

    Удалить файл можно командой crontab -ri. Флаг i очень важен, он запрашивает ваше подтверждение перед безвозвратным удалением файла. Если выполнить команду без него, файл удалится сразу.

    Проверить результат работы cron

    Демон Cron по умолчанию будет уведомлять вас о результатах работы скрипта на почту, которую вы указали при создании профиля. Помимо этого вы можете настроить отправку результатов себе на другой электронный адрес, сохранять результаты в журнал вывода cron или ничего с ними не делать.

    Если вы хотите получать уведомления о работе скрипта не на тот электронный адрес, который указан в вашем профиле, модифицируйте файл crontab. В нем укажите почту, на которую планировщик должен направить результаты. Обратите внимание, что для корректной отправки результатов на вашем сервере должен быть установлен и настроен почтовый агент.

    Адрес электронной почты задается в начале файла crontab c помощью оператора MAILTO. Ниже — пример выдуманной задачи по очистке логов, ее результат приходит на почту admin@domain.com.

    MAILTO = "admin@domain.com" 0 1 * * * /bin/bash /remove-log.sh

    Хорошим тоном считается сохранять результаты работы фоновых скриптов в журнал. Такой вариант особенно хорошо подходит для задач, которые выполняются часто. В случае неудачного выполнения задачи отчет рискует потеряться в почте, а лог-файл всегда можно разобрать, найти ошибки и поправить скрипт.

    С помощью оператора > нужно направить вывод в файл журнала — всё, в том числе ошибки, окажется в лог-файле.

    */20 * * * * rm -r /home/user/cache > /home/user/reports/cron-rm-cache.log

    Когда скрипт ничего не выводит и просто исполняется в фоне, мы можем вообще отключить уведомления и журналирование. Для этого перенаправляем результат в уже знакомую нам пустую директорию /dev/null. Туда же — вывод ошибок, для этого добавляем конструкцию 2>&1, где 2 — стандартная ошибка, stderr, а &1 — вывод по умолчанию, то есть в нашем случае /dev/null.

    30 2,6 * * * /usr/bin/php /var/www/logout-bots.php > /dev/null 2>&1

    Но даже если вывод результатов отключен, можно проверить, работает ли скрипт, в журнале syslog. Отыщите там слово CRON с помощью команды grep.

    grep CRON /var/log/syslog

    Если в результате вы увидите процесс исполнения команд, значит всё настроено верно, и скрипт работает. Если что-то пошло не так, там же будут выведены ошибки.


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны