- Что такое cron
- Как работает cron
- Установка cron
- Управление файлами crontab
- Просмотр и удаление crontab
- Управление выводом cron
- Проверка работы скриптов
Автоматизация задач – важный элемент эффективного администрирования серверов. В Ubuntu 18.04 (как и в других дистрибутивах Linux) для этого часто используется cron – система планирования задач.
В этой статье мы рассмотрим, как настроить cron, чтобы автоматизировать различные задачи на вашем сервере.
Что такое cron
Cron – это системный демон в Unix-подобных операционных системах, благодаря которому можно автоматизировать выполнение задач по расписанию. Он позволяет пользователям запускать команды или скрипты в конкретное время или через определенные интервалы времени.
Cron использует таблицы, чтобы определять, какие задачи и когда должны быть выполнены.
Как работает cron
Для управления задачами cron использует специальные файлы, которые называются crontab (сокращение от «cron table»). У каждого пользователя системы может быть личный файл crontab, в котором перечислены команды и время их выполнения.
Когда система загружается, cron запускается как фоновый процесс и периодически проверяет файлы crontab, чтобы узнать, не пришло ли время для выполнения какой-либо задачи. Если время выполнения совпадает с текущим временем, cron запускает соответствующую команду.
Основной файл настройки cron – это /etc/crontab. В нем записываются все задачи cron, а также расписание их выполнения. В каждой строке этого файла содержится информация о том, когда и какие команды или скрипты должны выполняться. Помимо этого, в файл можно добавлять служебные параметры, такие как почтовый адрес для отправки результатов выполнения задач, используемую оболочку и переменные среды. Например, вы можете указать, что результаты выполнения всех задач нужно отправлять на определенный электронный адрес. Такая возможность очень полезна для мониторинга и диагностики.
Каждый пользователь системы может создавать свои собственные задачи cron. Они хранятся в отдельных файлах в директории /var/spool/cron/crontabs/. Так каждый пользователь системы может управлять своими задачами независимо от других пользователей. Например, если у вас есть несколько пользователей на сервере, каждый из них может настроить crontab, чтобы автоматизировать свои задачи, не влияя на задачи других пользователей.
Синтаксис crontab
Каждое задание в crontab добавляется с новой строки. Строка состоит из двух частей: настроек расписания и непосредственно команды или скрипта.
Как выглядит общий синтаксис:
Расписание
Как мы уже указали ранее, расписание в crontab состоит из пяти полей, разделённых пробелами:
- Минута (возможные значения: 0–59). Указывает, в какую минуту часа должна выполняться задача.
- Час (возможные значения: 0–23). Указывает, в какой час должна выполняться задача.
- День месяца (возможные значения: 1–31). Указывает, в какой день месяца должна выполняться задача.
- Месяц (возможные значения: 1–12, jan – dec). Указывает, в каком месяце должна выполняться задача.
- День недели (возможные значения: 0–6, sun – mon). Указывает, в какой день недели должна выполняться задача.
Чтобы задать регулярность выполнения задач, используются специальные символы:
- «*» – символ подстановки, который представляет все значения. Например, если в поле минут стоит *, задача будет выполняться каждую минуту.
- «,» помогает создать список значений. Например, «1,8» в поле часов задает выполнение задачи в 1 и 8 часов. Этот символ позволяет задать несколько временных точек для одной задачи без необходимости создавать несколько записей.
- «-» задаёт диапазон значений. Например, 1-5 в поле дней недели означает выполнение задачи с понедельника по пятницу.
- «/» обозначает шаг. Например, */5 в поле часов означает выполнение задачи каждые пять часов. Этот символ позволяет задать регулярные интервалы выполнения задачи, что значительно упрощает настройку периодических задач.
Примеры:
Чтобы лучше понять гибкость и мощность cron, рассмотрим несколько дополнительных примеров расписания. Они помогут вам увидеть, как можно настроить выполнение задач в зависимости от ваших конкретных потребностей:
- Выполнять задачу дважды в день – в 8:00 и 18:00 вечера:
- Выполнять задачу по понедельникам в 9:00 утра:
- Выполнять задачу 1-го числа каждого месяца в полночь:
- Выполнять задачу каждые 10 минут с 9:00 до 18:00 с понедельника по пятницу:
- Выполнять задачу каждую минуту:
Специальные символы Cron
Чтобы упростите создание расписания, в cron предусмотрены часто используемые переменные:
- «@reboot» указывает выполнять задачу при загрузке системы.
- «@yearly» или «@annually» указывает, что задача должна выполняться раз в год. Аналог: 0 0 1 1 *.
- «@monthly» – указывает, что задача должна выполняться раз в месяц. Аналог: 0 0 1 * *.
- «@daily» или «@midnight» указывает выполнение задачи ежедневно. Аналог: 0 0 * * *.
- «@hourly» – задает выполнение задачи каждый час. Аналог: 0 * * * *.
Установка cron
В большинстве современных дистрибутивов cron уже включен в базовую систему, но, если по какой-то причине он отсутствует, его можно установить через пакетный менеджер.
Прежде чем устанавливать cron, полезно убедиться, что он не установлен на системе. Это можно сделать, выполнив команду:
Если cron установлен, команда покажет текущий список задач или сообщит, что crontab отсутствует для текущего пользователя. Если cron не установлен, будет выдано сообщение об ошибке. Например:
Перед началом установки рекомендуется обновить список доступных пакетов и их версий. Для этого пропишите:
Эта команда обновит локальную базу данных пакетов, что позволит установить самые последние версии программ.
Чтобы установить cron, выполните следующую команду:
Ubuntu запросит подтверждение установки, после чего начнется процесс загрузки и установки пакета cron. Обычно это занимает всего несколько секунд.
Когда установка завершится, убедитесь, что служба cron запущена и работает корректно. Для этого введите:
Если cron запущен, вы увидите сообщение, что служба активна – «active (running)».
Чтобы служба cron автоматически запускалась при загрузке системы, выполните команду:
Управление файлами crontab
Когда вы определились с расписанием задач и узнаете, какие задачи хотите запланировать, можно будет перейти к следующему шагу – поместить их в файл crontab, чтобы демон cron смог их прочитать и выполнить в указанное время.
Важно понимать, что crontab – это специальный файл, который содержит расписание задач для cron, но непосредственно редактировать его не рекомендуется. Вместо этого существует команда crontab, которая облегчает работу с этим файлом и предотвращает возможные ошибки.
Чтобы отредактировать файл crontab, используйте команду:
Если вы запускаете эту команду впервые от имени текущего пользователя, система предложит вам выбрать текстовый редактор по умолчанию.
В зависимости от настроек, вы можете увидеть следующий вывод:
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
Введите номер, соответствующий редактору, который вы хотите использовать. Чтобы выбрать редактор по умолчанию (как правило, это nano), просто нажмите ENTER.
После этого откроется новый файл crontab, который может содержать комментарии с инструкциями по его использованию. Теперь вы можете добавить в него расписание своих задач. Главное – не забывайте прописывать каждую на отдельной строке.
Чтобы сохранить и закрыть файл crontab, используйте подходящую комбинацию клавиш, в зависимости от выбранного редактора. В nano зажмите CTRL+X, а затем введите Y и нажмите Enter, чтобы подтвердить внесенные изменения.
Просмотр и удаление crontab
Если вы хотите просто просмотреть содержимое своего crontab, не редактируя его, используйте команду:
Эта команда выведет текущий файл crontab пользователя, позволяя увидеть все запланированные задачи.
Иногда возникает необходимость очистить crontab, удалив все задачи. Для этого можно использовать команду:
Важно! Будьте внимательны, эта команда немедленно удалит файл crontab.
Если вы хотите, чтобы команда запрашивала подтверждение перед удалением, используйте флаг -i:
Результат:
Введите y, чтобы удалить crontab, или n, чтобы отменить действие.
Чтобы временно отключить выполнение задачи, достаточно закомментировать строку, добавив символ # в начале. Это полезный способ, если вам нужно временно прекратить выполнение задачи, но вы не хотите удалять запись из crontab, чтобы затем восстанавливать её.
Управление выводом cron
Поскольку задачи cron выполняются в фоновом режиме, их результаты не всегда очевидны и доступны пользователю. Теперь, когда вы знаете, как использовать команду crontab и как планировать задачи в cron, стоит разобраться с несколькими способами перенаправления вывода cron. Так вы сможете отслеживать их выполнение и получать необходимую информацию о работе ваших скриптов.
Уведомления по электронной почте
Один из способов отслеживания выполнения задач cron – перенаправление их вывода на электронную почту. Если на вашем сервере установлен и настроен почтовый агент (например, Sendmail), вы можете автоматически получать результаты выполнения задач на адрес электронной почты, который связан с вашей учетной записью пользователя Linux.
Чтобы указать другой адрес электронной почты, на который должны приходить результаты выполнения задач, можно использовать параметр MAILTO в начале файла crontab.
Например, если вы хотите получать уведомления на почту admin@example.ru, ваш файл crontab может выглядеть следующим образом:
0 4 * * * /usr/local/bin/backup.sh
Теперь cron будет запускать резервное копирование данных ежедневно в 4:00 утра, а затем отправлять свой вывод на указанный адрес электронной почты. Такой способ особенно удобен для мониторинга и быстрого реагирования на ошибки или важные события.
Уведомления в журнал
Сохранение результатов работы фоновых скриптов в журнал считается хорошей практикой, особенно для часто выполняемых задач. Если выполнение задачи прервалось, отчет об этой ситуации может потеряться в почте, а лог-файл всегда можно проанализировать, найти ошибки и исправить скрипт.
Чтобы перенаправить вывод задачи cron в лог-файл можно использовать оператор >.
Например:
Скрипт очистки данных будет выполнять каждые 15 минут, а его вывод записываться в лог-файл /var/log/cron_data_cleanup.log. Такой подход поможет вам сохранить всю важную информацию о выполнении задачи, включая возникнувшие ошибки.
Отключение вывода
Возможно, вам не нужны результаты выполнения задачи cron. Если скрипт не выводит никакой информации и просто выполняется в фоновом режиме, можно полностью отключить уведомления и журналирование.
Для этого перенаправьте вывод в пустую директорию /dev/null:
В этом примере задача запускается ежедневно в 5:30 утра, а её вывод, включая ошибки, перенаправляется в /dev/null. Здесь «2>&1» означает, что стандартный вывод ошибок также перенаправляется в /dev/null.
Проверка работы скриптов
Даже если вывод результатов выполнения задач отключён, вы все равно можете проверить, работают ли ваши скрипты, через журнал syslog.
Чтобы найти записи, которые связаны с cron, используйте команду grep:
Если задача cron выполняется корректно, вы увидите соответствующие записи в syslog. Например, вы можете увидеть записи о запуске задач и любых возникающих ошибках.
Заключение
Автоматизация задач с помощью cron в Ubuntu 18.04 – это полезный и гибкий инструмент для системных администраторов и пользователей. С помощью cron можно легко настроить выполнение регулярных задач, включая резервное копирование, очистку данных и мониторинг системы. Он значительно повышает эффективность управления сервером.