Планирование заданий Cron с помощью Crontab
Cron — это демон планирования, который выполняет задачи через определенные промежутки времени. Эти задачи называются заданиями cron и в основном используются для автоматизации обслуживания или администрирования системы.
Задания cron можно запланировать для запуска по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Что такое файл Crontab
Crontab (таблица cron) — это текстовый файл, определяющий расписание заданий cron. Есть два типа файлов crontab. Общесистемные файлы crontab и файлы crontab отдельных пользователей.
Файл /etc/crontab и сценарии в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
Синтаксис и операторы Crontab
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда, которую нужно запустить.
Первые пять полей могут содержать одно или несколько значений, разделенных запятой, или диапазон значений, разделенных дефисом.
Общесистемные файлы Crontab
Синтаксис общесистемных файлов crontab немного отличается от пользовательских файлов crontab. Он содержит дополнительное обязательное пользовательское поле, в котором указывается, какой пользователь будет запускать задание cron.
Предопределенные макросы
Есть несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты из пяти столбцов.
Команда Linux Crontab
Команда crontab позволяет вам установить, просмотреть или открыть файл crontab для редактирования:
Переменные Crontab
Ограничения Crontab
По умолчанию существует только файл /etc/cron.deny и он пуст, что означает, что все пользователи могут использовать команду crontab. Если вы хотите запретить доступ к командам crontab определенному пользователю, добавьте имя пользователя в этот файл.
Примеры заданий Cron
Ниже приведены некоторые примеры заданий cron, которые показывают, как запланировать выполнение задачи в разные периоды времени.
Запускайте команду в 15:00 каждый день с понедельника по пятницу:
Выполняйте две команды каждый понедельник в 15:00 (используйте оператор && между командами):
Запускать PHP-скрипт каждые 2 минуты и записывать результат в файл :
Запускайте скрипт каждый день, каждый час, каждый час с 8 утра до 4 вечера:
Запускайте скрипт в первый понедельник каждого месяца в 7 утра.
Запускайте скрипт в 21:15 1 и 15 числа каждого месяца:
Выводы
Cron — это демон, который позволяет вам планировать задачи на определенную дату и время.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Время планировать задачи
Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности, проверка использования дискового пространства, отправка электронных писем, перезагрузка сервера и так далее. В некоторых приложениях, таких как Drupal или Magento, для выполнения определенных задач требуются задания cron.
Задания cron могут быть запланированы по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Про Linux за 5 минут
Что такое файл Crontab
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
/etc/crontab и файлы в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron.
Синтаксис Crontab и операторы
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда для запуска.
Первые пять полей могут содержать одно или несколько значений, разделенных запятой или диапазон значений, разделенных дефисом.
Общесистемные файлы Crontab
Предопределенные макросы
Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.
Команда Crontab
Команда crontab позволяет установить или открыть файл crontab для редактирования. Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:

Переменные Crontab
Демон cron автоматически устанавливает несколько переменных окружения.
Ограничения Crontab
Примеры Cron заданий
Ниже приведены некоторые примеры заданий cron, которые покажут вам, как запланировать выполнение задачи на разные периоды времени.
Понимание Crontab в Linux с примерами
Главное меню » Linux » Понимание Crontab в Linux с примерами
Не пугайтесь crontab
Для нас Crontab был одной из самых пугающих концепций Linux как новичок. В то время, когда мы познакомились с ‘crontab’, мы использовали командную строку всего несколько дней и почти не понимали, как использовать основные команды навигации по файлам, такие как ‘ls’ и ‘cd’.
Причина, по которой мы приводим свою личную историю обучения, заключается в том, что многие новые пользователи Linux могут испытывать такое же поражение, когда смотрят на уникальный синтаксис «crontab». Мы можем заверить вас, хотя, это не так сложно, когда вы понимаете, как это работает.
Что вы узнаете в этой статье
Мы кратко расскажем о некоторых концепциях, связанных с crontab, чтобы облегчить понимание. Наша цель – контекстуализировать эти понятия и проиллюстрировать, как они связаны друг с другом.
Краткое введение в ключевые концепции cron
Позвольте сначала познакомить вас с некоторой базовой концепцией «cron».
Разница между Cron, Crontab и Cron Job
Визуальный взгляд на вещи помогает быстрее понять новые темы. Вот разбивка того, как эти три темы обычно взаимодействуют. Затем я опишу каждый более подробно.
| Элемент | Имя Linux | Смысл |
|---|---|---|
| Daemon (Демон) | ‘crond’ | Произносится «demon» или «day-mon». Это фоновые системные процессы Linux. |
| Table (Таблица) | ‘crontab’ | Вы записываете строки в эту таблицу при вводе команды crontab. Каждая звездочка «*» представляет отрезок времени и соответствующий столбец в каждой строке. |
| Job (Задача) | Cron Job | Конкретная задача, которая должна быть выполнена, описана в строке в сочетании с назначенным ей идентификатором времени |
Таблица Cron
Crontab означает Cron Table. Это системный файл Linux, который создает табличную структуру, в которой поля разделяются пробелами. Пользователи могут заполнять таблицу, присваивая значения каждому полю (звездочка).
Если это поможет, вы можете думать о вашем crontab как о мини-базе данных.
Cron Job
Если вы не знакомы с базами данных, вы можете представить ячейки в пустом файле Excel. В любом случае, для этой аналогии каждая звездочка представляет столбец, значение которого определяется его заголовком. Последний столбец будет вызовом команды или сценария. Каждый полный ряд можно рассматривать как отдельную работу. Их часто называют “cron jobs”, хотя работа, задание и т. д. Являются взаимозаменяемыми терминами.
Демон Cron
Мы уже обсуждали таблицу и как мы заполняем ее рабочими местами. Но как эти работы выполняются? Системный процесс под названием Daemon выполняется на фоне нашего Linux-компьютера.
Есть демоны для разных сервисов. Обычно они называются суффиксом «d» к имени службы.
Естественно, демон cron называется «crond». С нашей стороны не требуется никаких действий для запуска этого демона, но если вы считаете, что команда не работает должным образом, вы можете использовать команду ps, чтобы убедиться, что crond запущен.
Эта команда будет искать текущие процессы для всех пользователей и возвращать любые экземпляры ‘crond’.
Мы видим, что демон запущен для нашей учетной записи.
Понимание синтаксиса Crontab
Теперь, когда у вас есть смутное представление о том, как работает cron, давайте посмотрим на синтаксис использования crontab. Мы надеемся, что это менее запутанно, если вы можете представить эту информацию в виде таблицы в вашем уме.
Мы обещаем, что это произойдет, потому что для вас, как только мы приведем в действие наш собственный пример. Давайте снова рассмотрим синтаксис для заданий cron.
Как видите, синтаксис crontab состоит из 5 звездочек. Вот что представляет каждая из этих звездочек:
Чтобы запланировать задачу, вы заменяете соответствующую звездочку на желаемое значение.
Давайте немного потренируемся. Если у вас есть crontab, подобный приведенному ниже, как вы думаете, когда работа будет запущена?
Вопрос: Когда команда будет запущена, если вы зададите задание таким образом?
A. Каждый час с понедельника по субботу
B. Каждая минута по воскресеньям
C. Только в полночь с понедельника по субботу
D. Только в полночь по воскресеньям
Настройте доступ crontab для вашей учетной записи пользователя
Когда мы запускаем эту команду, вы видите, что у нас нет crontab в этой системе.
Если сначала не получится, sudo
Ваша система автоматически загрузит ваш crontab в нужное место, которое может варьироваться в зависимости от дистрибутива, но часто находится в каталоге, таком как /var/spool/cron/crontabs. Не пытайтесь редактировать файлы здесь.
Что произойдет, если задание cron обнаружит ошибку?
Поведение по умолчанию – отправлять по электронной почте свой вывод. Эта функция предназначена для администраторов, которые могут автоматически отправлять журналы на «локальную» электронную почту в домене сети.
Вы можете настроить это самостоятельно, если у вас есть почтовый сервер. Существуют также способы автоматизации вывода электронной почты в GMail или аналогичные сервисы. Тем не менее, эти методы выходят за рамки данной статьи.
Вместо этого мы рассмотрим два распространенных способа обойти ошибку.
1) Отправить вывод в файл
Вы можете назначить файл для этого типа вывода для отправки, а затем использовать >> для перенаправления вывода.
Использование >>добавит информацию в существующий файл, в то время как один символ > перезапишет файл. Это важно знать, если вы хотите поддерживать большой файл журнала, который часто обновляет записи. Оба автоматически создадут файл, если он не существует.
Пример работы Cron:
2) Используйте /dev/null
Это обойдёт опцию электронной почты, по сути удалив данные. Стандартная ошибка (‘2’) и стандартный вывод (‘1’) отправляются в нулевой файл.
Вы могли заметить, что мы используем команду echo для примеров. Для этого нет особой причины, но она позволяет легко проверять изменения и «проверять свою работу».
Если вы немного программировали, возможно, вы использовали команду print для проверки вашей логики. Это та же концепция.
Давайте попробуем создать нашу собственную работу cron. Если вы уже «подыгрываете», это здорово. Если нет, то сейчас самое время подготовить этот терминал и повеселиться.
Примеры Crontab: планирование команд и скриптов
Мы показали вам пару примеров, как выводится информация. Это имело для вас смысл?
Позвольте пройти первый пример.
Minute | Hour | Day-Date | Month | Day Name | Command
|—–|——|—–|—–|—–|—–|—–|
| 0 | * | * | * | * | echo “Linux is Cool!” >>
Установка минутного значения в «0» означает, что команда будет выполняться каждый час в час.
Расширенные графики работы
Вы можете редактировать несколько значений одновременно. Если вы хотите, вы можете заменить все 5 звездочек со спецификациями.
Minute | Hour | Day-Date | Month | Day Name | Command
|—–|——|—–|—–|—–|—–|—–|
|*/5 | 3-6 | */5 | */2 |0,6| echo “Linux is Cool!” >>
Есть идеи, что говорит этот? Ради этого урока мы сделал эту работу особенно запутанной. Было бы необычно иметь что-то с таким большим количеством параметров «в дикой природе», но давайте посмотрим, сможете ли вы расшифровать это.
Давайте попробуем это вместе:
| поле | Ценность | Смысл |
|---|---|---|
| Day Name | 0,6 | Суббота и воскресенье |
| Month | * / 2 | Каждый месяц, который делится на 2, месяц. |
| Day Date | * | Каждый день |
| Hour | 3-6 | С 3 до 6 утра |
| Minutes | * / 5 | Каждые 5 минут |
Вау, это было запутанно. Если вы смогли следовать этому, вы готовы справиться с лучшими из них.
Напишите простой скрипт автоматизации cron для резервного копирования файлов.
До этого момента написанные вами задания cron делали только одно. Это может быть полезно, но, возможно, вы хотите сделать несколько задач.
К счастью, это не только возможно, но и очень просто. Если вы помните из исходного примера синтаксиса, вы также можете использовать путь к сценарию.
Это не ограничивается только bash, вы также можете реализовать скрипт, который использует Python или Perl, если хотите.
Все, что осталось сделать, сделать этот скрипт работой cron.
И добавьте туда следующее:
На самом деле, идея очень понравилась, мы могли бы просто сохранить это как ежедневную резервную копию. Одна из модификаций, которую мы сделали, – это переместить архив в папку на нашу машине, которая синхронизируется с облачным хранилищем.
У вас есть идеи для сценария, который вы можете создать? Помогла ли вам эта статья лучше понять crontab? Поделитесь с нами в комментариях.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
18 примеров команды crontab
Cron (Command Run ON) — утилита для автоматического запуска программ и скриптов на сервере в определённое время. Cron очень полезен для рутинных задач, таких как сканирование системы, ежедневное резервное копирование и т.д. Cron автоматически выполняет задания в бэкенде в указанное время. Управлять cron нужно с помощью crontab. В этой статье вы увидите 18 полезных примеров команды crontab.
Синтаксис Crontab
Crontab имеет шесть полей. 1-5 поля определяют дату и время исполнения. 6 поле используется для команды/скрипта. Синтаксис выглядит следующим образом:
Как изменить расписание
Чтобы добавить или обновить задания в crontab, используйте команду ниже. Откроется текстовый файл с заданиями crontab, где их можно будет редактировать.
По умолчанию откроются задачи текущего пользователя. Для редактирования задач другого пользователя используйте команду:
Как узнать список заданий Crontab
Для просмотра записей crontab текущего пользователя используйте команду:
Чтобы посмотреть список заданий другого пользователя, используйте -u:
Примеры
1. Ежедневно в 2 часа ночи.
Это будет полезно для ежедневного резервного копирования.
2. Дважды в день
Команда ниже будет выполняться в 5 утра и 5 вечера ежедневно.
3. Каждую минуту
4. Каждое воскресенье в 17:00
Пригодится для планирования еженедельных задач.
5. Каждые 10 минут
Если вы хотите запустить скрипт с интервалом в 10 минут, вы можете настроить его, как показано ниже. Может быть полезно для мониторинга.
6. Определенные месяцы
Иногда может понадобиться запланировать задачи только на некоторые месяцы. Ниже приведен пример скрипта, который будет запущен в январе, мае и августе.
7. Определенные дни
Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.
8. Первое воскресенье каждого месяца.
Запланировать выполнение сценария только в первое воскресенье невозможно по параметру времени, но мы можем использовать условие в полях команд, чтобы сделать это.
9. Каждые четыре часа.
Если вы хотите запустить скрипт с интервалом в 4 часа:
10. Дважды в каждое воскресенье и понедельник.
Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:
11. Несколько задач
Можно запланировать несколько задач в одной записи с помощью точки с запятой:
12. Ежегодно (@yearly)
@yearly равно «0 0 1 1 *». Задание будет выполняться в первую минуту каждого года. Можно отправить новогодние поздравления 🙂
13. Ежемесячно (@monthly)
@monthly равно «0 0 1 * *». Задание будет выполняться в первую минуту месяца.
14. Еженедельно (@weekly)
@weekly равно «0 0 1 * mon». Задание будет выполняться в первую минуту недели.
15. Ежедневно (@daily)
@daily равно «0 0 * * *». Задание будет выполняться в первую минуту каждого дня.
16. Ежечасно (@hourly).
@hourly равно «0 * * * *». Задание будет выполняться в первую минуту каждого часа.
17. Выполнение задач при перезагрузке системы (@reboot).
@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.
18. Отправка результатов заданий на электронную почту
Если вы хотите отправить вывод на почту, то это можно сделать, установив переменную MAIL, как показано ниже.
Использование Cron для автоматизации задач в Ubuntu 18.04
By Mark Drake and Shaun Lewis
Published on February 20, 2020
Предыдущая версия данного обучающего руководства была написана Шоном Льюисом.
Введение
Cron — это хронологический демон-планировщик задач, работающий в операционных системах типа Unix, включая дистрибутивы Linux. Cron запускается в фоновом режиме, а задачи, запланированные в cron и именуемые «задачи cron», выполняются автоматически, что делает cron полезным для автоматизации связанных с обслуживанием задач.
В этом обучающем руководстве вы познакомитесь с тем, как планировать задачи с помощью специального синтаксиса cron. Также мы рассмотрим несколько комбинаций клавиш, которые вы можете использовать при создании расписаний задач, чтобы их проще было писать и понимать.
Предварительные требования
Для выполнения этого обучающего руководства вам потребуется доступ к компьютеру с Ubuntu 18.04. Это может быть ваш локальный компьютер, виртуальная машина или виртуальный приватный сервер.
Независимо от того, какой компьютер вы используете для выполнения этого обучающего руководства, у вас должен быть пользователь без привилегий root с настроенными правами администратора. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 18.04.
Установка cron
Почти все дистрибутивы Linux имеют ту или иную форму cron, установленную по умолчанию. Но если вы используете компьютер Ubuntu, где cron не установлен, вы можете установить его с помощью APT.
Перед установкой cron на компьютер Ubuntu обновите локальный индекс пакетов компьютера:
Затем выполните установку cron с помощью следующей команды:
Вам также нужно убедиться, что он настроен для работы в фоновом режиме:
После этого cron будет установлен в системе, а вы сможете начать составлять расписание задач.
Как работает Cron
Чтобы запланировать задачу, вам нужно открыть ваш файл crontab для редактирования и добавления задачи, написанной в форме выражения cron. Синтаксис выражений cron можно разбить на два элемента: расписание и команда для запуска.
Команда может быть практически любой командой, которую вы можете запустить в командной строке. Компонент расписания в синтаксисе разбит на 5 разных полей, которые расположены в следующем порядке:
| Поле | Допустимые значения |
|---|---|
| минута | 0–59 |
| час | 0–23 |
| День месяца | 1–31 |
| месяц | 1–12 или ЯНВ–ДЕК |
| День недели | 0–6 или ПНД–ВСК |
Все вместе задачи, запланированные в crontab, выглядят следующим образом:
Ниже представлен функциональный пример выражения cron. Это выражение запускает команду curl http://www.google.com каждый вторник в 17:30:
Также существует несколько специальных символов, которые вы можете включить в компонент расписания выражения cron, что упрощает создание расписания:
Ниже представлено несколько примеров использования компонента расписания cron:
Если вы найдете что-то из этого затруднительным или вам потребуется помощь при написании расписания для ваших собственных задач cron, Cronitor предоставляет удобный редактор выражений cron, который называется Crontab Guru и который вы можете использовать для проверки действительности ваших расписаний cron.
Управление файлами crontab
После настройки расписания и определения задания, которое нужно запустить, вам нужно будет поместить его в место, где ваш демон сможет его прочитать.
Вы можете изменить файл crontab с помощью следующей команды:
Если вы впервые запускаете команду crontab в этом профиле пользователя, вы сможете выбрать используемый по умолчанию текстовый редактор для использования при редактировании crontab:
После выбора вы попадете в новый файл crontab, содержащий ряд закомментированных инструкций по его использованию:
Если вы хотите просмотреть содержимое файла crontab, не изменяя его, вы можете использовать следующую команду:
Вы можете стереть файл crontab с помощью следующей команды:
Предупреждение. Следующая команда не будет запрашивать подтверждение того, что вы хотите стереть ваш файл crontab. Используйте ее, если вы уверены, что хотите стереть его.
Управление выводом задачи cron
Поскольку задачи cron выполняются в фоновом режиме, не всегда очевидно, что они были запущены успешно. Теперь, когда вы знаете, как использовать команду crontab и как запланировать задачу cron, вы можете начать экспериментировать с различными способами перенаправления результатов выполнения задач cron, чтобы помочь вам отследить их успешное выполнение.
Если у вас есть агент передачи почты, например, Sendmail, который установлен и настроен на сервере, вы можете отправить результат выполнения задачи cron на электронный адрес, связанный с вашим профилем пользователя Linux. Также вы можете вручную задать адрес электронной почты, указав параметр MAILTO вверху crontab.
Также вы можете перенаправить вывод задачи cron в файл журнала или в пустую директорию, чтобы не получать электронное сообщение с выводом.
Чтобы добавить вывод запланированной команды в файл журнала, добавьте >> в конец команды, после чего укажите имя и расположение файла журнала, как показано здесь:
Ограничение доступа
Например, чтобы запретить доступ для всех пользователей, а затем предоставить доступ пользователю ishmael, вы можете использовать следующую последовательность команд:
Специальный синтаксис
Существует также несколько коротких команд, которые вы можете использовать в файле crontab, чтобы упростить процесс создания расписания задач. Они являются эквивалентом для указанных примеров числового расписания:
| Сокращение | Краткая запись для |
|---|---|
| @hourly | 0 * * * * |
| @daily | 0 0 * * * |
| @weekly | 0 0 * * 0 |
| @monthly | 0 0 1 * * |
| @yearly | 0 0 1 1 * |
Примечание. Не все демоны cron могут понимать этот синтаксис (в частности, более ранние версии), поэтому рекомендуем убедиться в этом, прежде чем широко использовать подобный синтаксис.
Кроме того, краткая запись @reboot будет запускать любую команду, которая следует за ней при каждом запуске сервера:
Использование этих комбинаций при возможности поможет понимать расписание задач в вашем файле crontab.
Заключение
Cron — это гибкая и мощная утилита, которая позволяет снизить количество ресурсов, затрачиваемых на администрирование системы. Используя cron вместе со скриптами оболочки, вы можете автоматизировать задачи, которые обычно вызывают затруднения. Например, вы можете написать скрипт оболочки для отправки резервных копий данных решению хранилища объектов и затем автоматизировать его с помощью cron.







