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

Обновлено: 04.07.2024

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

Задания cron можно запланировать для запуска по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.

Что такое файл Crontab

Файлы crontab пользователей именуются в соответствии с именем пользователя, а их расположение зависит от операционной системы. В дистрибутивах на основе Red Hat, таких как CentOS, файлы crontab хранятся в каталоге /var/spool/cron , а в Debian и Ubuntu файлы хранятся в каталоге /var/spool/cron/crontabs .

Хотя вы можете редактировать пользовательские файлы crontab вручную, рекомендуется использовать команду crontab .

Файл /etc/crontab и сценарии в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.

В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron. , и эти скрипты будут выполняться каждый hour/day/week/month .

Синтаксис и операторы Crontab

Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда, которую нужно запустить.

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

Общесистемные файлы Crontab

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

Предопределенные макросы

Есть несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты из пяти столбцов.

Команда Linux Crontab

Команда crontab позволяет вам установить, просмотреть или открыть файл crontab для редактирования:

Команда crontab открывает файл crontab с помощью редактора, указанного в EDITOR среды VISUAL или EDITOR .

Переменные Crontab

Демон cron автоматически устанавливает несколько переменных среды .

Ограничения Crontab

Файлы /etc/cron.deny и /etc/cron.allow позволяют вам контролировать, какие пользователи имеют доступ к команде crontab . Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.

По умолчанию существует только файл /etc/cron.deny и он пуст, что означает, что все пользователи могут использовать команду crontab. Если вы хотите запретить доступ к командам crontab определенному пользователю, добавьте имя пользователя в этот файл.

Если файл /etc/cron.allow существует, только пользователи, перечисленные в этом файле, могут использовать команду crontab .

Если ни один из файлов не существует, только пользователи с правами администратора могут использовать команду crontab .

Примеры заданий Cron

Ниже приведены некоторые примеры заданий cron, которые показывают, как запланировать выполнение задачи в разные периоды времени.

Запускайте команду в 15:00 каждый день с понедельника по пятницу:

Запускать скрипт каждые 5 минут и перенаправлять стандартный вывод на dev null , только стандартная ошибка будет отправлена на указанный адрес электронной почты:

Выполняйте две команды каждый понедельник в 15:00 (используйте оператор && между командами):

Запускать PHP-скрипт каждые 2 минуты и записывать результат в файл :

Запускайте скрипт каждый день, каждый час, каждый час с 8 утра до 4 вечера:

Запускайте скрипт в первый понедельник каждого месяца в 7 утра.

Запускайте скрипт в 21:15 1 и 15 числа каждого месяца:

Установите пользовательские PATH HOME , PATH , SHELL и MAILTO и запускайте команду каждую минуту.

Выводы

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

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

Как посмотреть задания cron

Думаю, что начать следует не с настройки, а именно как посмотреть уже настроенные задачи cron. На самом деле задачи хранятся в трёх местах:

  • База данных crontab - здесь хранятся все записи cron пользователя, которые вы настраиваете вручную;
  • /etc/crontab и /etc/cron.d/ - системные записи cron и записи cron различных пакетов;
  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly - здесь лежат скрипты, которые надо выполнять раз в час, день, неделю и месяц соответственно, обычно эти папки используются различными пакетами, но вы тоже можете их использовать для своих скриптов.

Чтобы посмотреть задания cron добавленные текущим пользователем используйте команду crontab и опцию -l:

Все задачи cron разделены по пользователям, и команды из этих задач будут выполнятся от имени того пользователя, для которого они были добавлены. Чтобы посмотреть задачи другого пользователя используйте опцию -u:

sudo crontab -u root -l

А теперь давайте поговорим о том, как добавить команду cron для нужного вам пользователя.

Добавление команды в cron

Чтобы добавить задание cron из терминала можно использовать утилиту crontab. Для открытия временного файла с текущими заданиями этого пользователя выполните:

Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:

sudo crontab -u имя_пользователя -e

Команда откроет текстовый редактор, где вы сможете добавлять или редактировать задания cron. Будет использован установленный по умолчанию редактор, например, vim:


Каждая задача формируется следующим образом:

минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде

Чтобы подставить любое значение используйте звездочку "*". Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить. Обратите внимание, что значение переменной PATH здесь не действует, поэтому путь надо писать полностью либо объявлять свою переменную PATH в начале файла настройки. Давайте сделаем простой скрипт, который будет выводить в лог дату своего запуска и поможет отладить всё это:

sudo vi /usr/local/bin/script.sh


Сделайте скрипт исполняемым:

sudo chmod ugo+x /usr/local/bin/script.sh

Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:

Или только в нулевую минуту, то есть в начале каждого часа или другими словами запуск cron каждый час:

Можно указать несколько значений через запятую, для того чтобы определить несколько точек запуска. Например, будем запускать скрипт cron каждые 15 минут:

Можно записывать значения через дефис чтобы указывать промежутки точек запуска. Например, для того чтобы запускать скрипт каждую минуту, но только первые 10 минут каждого часа используйте:

Чтобы чтобы настроить интервал выполнения более тонко можно использовать слеш (/) с помощью этого символа и звездочки можно указать шаг с которым будет выполнятся команда. Например, каждые пять минут:

Чтобы запустить cron каждые 10 минут используйте:

А для запуска cron каждые 30 минут:

Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:

0 6,18 * * * /usr/local/bin/script.sh

А вот запустить cron каждую секунду или раз в 30 секунд не получится. Минимальная единица времени в cron это минута. Но можно создать команду, которая будет запускаться раз в минуту и по 30 секунд спать и затем снова делать:

* * * * * /usr/local/bin/script.sh && sleep 30 && /usr/local/bin/script.sh

Это довольно плохой подход и лучше так не делать. Кроме того, для экономии времени при работе с cron можно использовать специальные слова-маркеры времени. Вот они:

Для подбора правильной комбинации даты можно использовать сервис crontab.guru. Он позволяет в реальном времени посмотреть когда будет выполнено то или иное условие:


Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:

cat /var/log/syslog | grep CRON


Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly. чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.

Выводы

В этой статье мы разобрались как выполняется настройка cron linux на примере Ubuntu. Как видите, все только кажется сложным, но на самом деле просто если разобраться.

Мне нужно было создать крон задание , которое бы раз в час генерировало отчет о свободном месте на дисках и отсылало этот отчет на email. Делается это очень просто :

Теперь cron будет отправлять мне отчет о работе на мой указанный email. Думаете что установить крон это легко?- Да это так, но иногда случаются казусы, рассмотрим пример:

Вышеустановленный крон запустит `execute_this` в 5:30 утра каждые три дня, но предположим что у нас Новый Год. Когда будет запускаться крон, 1 января? Вообще-то, нет. Это будет выполнен 3-го января.

Этот кронджоб выполниться с 1-го до 31 (включительно). Это, как мы получаем смещение, чтобы начать на 1-ом.

Теперь я просто проверяю, если это равномерно делится на три по модулю, который возвращает остаток от деления:

Помните, нам нужно смещение, так что мы начинаем c 1-го числа. Так оно и есть в настоящее время, и крон запускается с 3-го. Только путем вычитания одного дня с года можно получить все желаемое:

И так, финишнай КРОН будет выглядеть так:

Вот такой финт ушами 🙂 Идем далее и узнаем больше о кроне 😉

cron имеет несколько каталогов и конфигурационный файл: [Минуты], [Часы], [Дни мес.], [Месяц], [День недели], [Команда], [Имя_пользователя]
  • минуты 0-59
  • Часы 0-23
  • День месяца 1-31
  • месяц 1-12
  • День недели 0-7 (0-Вс, 1-ПН, 2-Вт, 3-Ср, 4-чт, 5-пт, 6-Сб, 7-вс)

cron1

Можно заменить пять полей времени немного по др:

Пример, следующий крон, выполнит задание раз в день:

Оператор позволяет указать несколько значений в поле. Вот следующие операторы которые могут быть использованы: Нужно посмотреть запущен ли cron в системе- легко: Можно посмотреть список заданий в кроне у каждого пользователя (например у пользователя captain): Или отредактировать крон задание у пользователя captain:

Безопасность в cron

По умолчанию, данных файлов нет в ОС и все могут создавать различные задачи в crontab (запускать и выполнять скрипты).

Можете легко проверить, какие файлы, принадлежат к cron- у:

Опции в crontab

-l
Показать текущий кронтаб.

-r
Удалить текущий кронтаб.

-e
Редактировать текущий кронтаб, с помощью редактора ( визуального или редактора в переменном окружении).

-s
Только SELinux: добавляет текущий SELinux контекст безопасности (строку MLS_LEVEL) к файлу кронтаб до редактирования или замены.


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

Учитывая это описание, вы можете представить, как его используют системные администраторы для автоматизации задач резервного копирования, очистки каталогов, уведомлений и т. д.

Задания Cron выполняются в фоновом режиме и постоянно проверяют файл /etc/crontab и каталоги /etc/cron.*/ и /var/spool/cron/.

Файлы cron не должны редактироваться напрямую, и у каждого пользователя есть уникальный crontab.

Как тогда вы должны создавать и редактировать задания cron?

С помощью команд crontab.

Команда для создания и редактирования заданий cron такая же и простая.

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

Cron Синтаксис

Как и с любым языком, работать с cron намного проще, когда вы понимаете его синтаксис и существует 2 формата, которые вы должны знать:

Объяснение приведенного выше синтаксиса cron:

Это не все. Cron использует 3 символа оператора, которые позволяют вам указать несколько значений в поле:

  • Звездочка (*): указывает все возможные значения для поля
  • Запятая (,): указывает список значений
  • Тире (-): указывает диапазон значений
  • Разделитель (/): задает значения шага значения в поле:

Теперь, когда вы знаете синтаксис и операторы Cron, давайте рассмотрим некоторые примеры!

Примеры Cron

Первым шагом к запуску команд cron является установка вашего crontab с помощью команды:

Запускать /root/backup.sh в 3 часа ночи каждый день:

Запуск script.sh в 16:30 второго числа каждого месяца:

Запускать /scripts/phpscript.php в 22:00 в течение недели:

Запускать perlscript.pl через 23 минуты после полуночи, 2 часа ночи и 4 часа ночи каждый день:

Запускайте команду Linux в 04:05 каждое воскресенье:

Настройки Cron

Список заданий cron.

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

Удалить задание Cron для конкретного пользователя.

Строки в Crontab

Строки являются одним из любимых вещей разработчика, потому что они помогают сэкономить время, устраняя повторяющиеся записи.

В Cron есть определенные строки, которые вы можете использовать для более быстрого создания команд:

  • @hourly: запускаться один раз в час, т.е. «0 * * * *»
  • @idnight: запускать раз в день, то есть «0 0 * * *»
  • @daily: так же, как полночь
  • @weekly: запускаться раз в неделю, то есть «0 0 * * 0»
  • @monthly: запускаться раз в месяц, т. е. «0 0 1 * *»
  • @annually: запускается один раз в год, то есть «0 0 1 1 *«
  • @yearly так же, как @annually
  • @reboot: запускать один раз при каждом запуске

Например, вот как делать резервную копию вашей системы каждый день:

На данный момент у вас есть все, что вам нужно для создания и управления системными задачами с помощью Cron.

Теперь вы можете начать настраивать и поддерживать несколько сред, используя запланированные команды.

Читайте также: