Настройка планировщика задач Cron в Linux

Александр Мельников

26 сентября 2019

Обновлено 13 августа 2022

Linux

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

Настроить cron можно несколькими способами. Самый простой и быстрый — указать задание руками в файл /etc/crontab. Проблема в том, что это может сделать только пользователь root.

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

# m h dom mon dow user command

# — строка закомментирована, т.е. не выполняется планировщиком

m — минуты. Диапазон значений 0-59

h — часы. Диапазон значений 0-23.

dom — day of month — день месяца (число).

Диапазон значений 1-31

mon — месяц. Диапазон значений 1-12

dow — day of week — день недели. указывается числом, где 0 — воскресенье, 6 — суббота.

user — пользователь от которого выполняется задача.

command — выполняемая задача.

Важно! Значения минут, часов, дней месяца, дней недели, а также месяца могут быть * (звездочкой) принимая все доступные значения. Также можно использовать список параметров разделенных запятой.

Примеры разберем подробнее немного позже.

Простым пользователям доступна системная утилита crontab. Для гибкости использования используются параметры:

 

crontab -e

Используется для редактирования или создания файла расписания для текущего пользователя

crontab -l

Вывод существующих задач в расписании пользователя

crontab -r

Удаление файла расписания текущего пользователя

crontab -u username

Работа с расписаниями указанных пользователей. Выполняется только от пользователя root

Добавим задание.

Для этого в консоли пишем команду:

crontab -e

Запустится редактор файла используемый по умолчанию (Ubuntu — nano/vi, FreeBSD — ee), в нашем случае mcedit из пакета Midnight Commander.

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

Сохраняем файл, выходим из редактора и проверяем список заданий crontab -l.

 

Проверим как работает удаление файла заданий — crontab -r.

Важно! Программа не спрашивает уверены ли вы в удалении файла заданий. Если нужно удалить конкретное задание, следует использовать crontab -e.

Для администратора важно, чтобы не все пользователи могли пользоваться планировщиком. Для этих целей можно использовать файлы /etc/cron.allow и /etc/cron.deny (в некоторых дистрибутивах эти файлы должны размещаться в /etc/cton. d). По умолчанию, использование cron разрешено всем пользователям.

Примеры использования в файле /etc/crontab.

Выполнение задачи каждые 5 минут от пользователя root:

*/5 * * * * root /root/scripts/script1.sh

В полдень и полночь:

0 */12 * * * root /root/scripts/backup.sh

Перезагрузка сервера в 0:00 в первый день месяца (исключительно как пример):

0 0 1 * * root reboot

Выполнение скрипта с понедельника по пятницу в полночь:

0 0 * * 1-5 root /root/script/backup_db.sh

Неправильный пример:

* 0 * * 1-5 root /root/script/backup_db.sh

Ошибка в том, что скрипт будет запускаться с понедельника по пятницу каждую минуту с 0:00 по 0:59

В заданиях назначаемых через crontab -e (т.е. от текущего пользователя) не указывается параметр имени пользователя, в случае примеров — root.

На что еще следует обратить внимание:

Все пути до исполняемых файлов следует писать абсолютными.

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

Оценка:

5 из 5

Аverage rating : 5

Оценок: 1

191028 Санкт-Петербург Литейный пр., д. 26, Лит. А

+7 (812) 403-06-99

700 300

ООО «ИТГЛОБАЛКОМ ЛАБС»

191028 Санкт-Петербург Литейный пр., д. 26, Лит. А

+7 (812) 403-06-99

700 300

ООО «ИТГЛОБАЛКОМ ЛАБС»

700 300

Настройка планировщика задач Cron в CentOS Linux

Cron — это планировщик задач, работающий в Unix-подобных операционных системах, включая все дистрибутивы Linux. Демон cron работает на сервере в фоновом режиме и запускает по расписанию запланированные задачи. В этой статье мы рассмотрим установку cron на сервер с Linux CentOS 8, познакомимся с синтаксисом cron, научимся добавлять в него различные задачи, управлять расписанием запуска.

Содержание:

  • Установка cron в Linux
  • Crontab: добавление задания в планировщик cron
  • Отправка уведомлений cron на e-mail
  • Файлы конфигурации и логи планировщика cron

Установка cron в Linux

По умолчанию cron доступен при установке CentOS 8. Если же у вас по каким-то причинам он отсутствует, вы можете установить его из базового репозитория с помощью yum / dnf:

# dnf update -y — обновить все ПО на сервере

# dnf install crontabs -y — установите cron

В моем случае cron уже был установлен:

После установки, демон crond нужно добавить в автозагрузку и запустить:

# systemctl enable crond. service
# systemctl start crond.service

Crontab: добавление задания в планировщик cron

Для добавления задач в cron можно использовать команду:

# crontab -e

Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это

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

Также можно отредактировать файл заданий cron вручную через mc:

# mcedit /var/spool/cron/root – имя файла может отличаться, в зависимости от того, под каким пользователем вы работаете.

Чтобы добавить простое задание по запуск bash скрипта в cron, выполните:

# crontab -e

Теперь добавьте расписание задания и путь к файлу скрипта:

* * * * * /root/test.sh

Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).

Если все сделали верно, ваше задание будет добавлено. Чтобы вывести список заданий cron, выполните:

# cat /var/spool/cron/root

* * * * * /root/test.sh

Или так:

# crontab -l

Данный скрипт будет запускаться через cron ежеминутно.

Каждая запись расписания crontab состоит из 5 полей:

минуты часы день_месяца месяцы день_недели
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

Можно использовать следующие допустимые значения для каждого из полей:

ПолеДиапазон значений
минуты 0-59
часы 0-23
день месяца 1-31
месяц 1-12 или jan feb mar apr may jun jul aug sep oct nov dec
день недели 0-6 (где 0 это воскресение) или
sun mon tue wed thu fri sat

Знак * означает все допустимые значения. Пример задания:

15 00 * * 1 /root/test.sh

Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:

Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:

15 * * * *
30 * * * *

Или исползовать более короткий синтаксис с запятой:

15,30 * * * *

Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:

* */2 * * *
Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:

0-10 * * * *
50-60 * * * *

Еще несколько примеров расписаний для cron:

  • запуск по будням в 12:00 и 18:00: 0 12,18 * * 1-5
  • каждые 30 минут: */30 * * * *
  • каждую субботу: 0 0 * * 6
  • каждый вторник и четверг в 2:00 ночи: 0 2 * * 2,4

Еще в cron можно использовать специальные переменные.

ПеременнаяОписаниеЭквивалент
@rebootЗапускается один раз при загрузке
@yearly

или

@annually

 

один раз в год 0 0 1 1 *
@monthlyодин раз в месяц 0 0 1 * *
@weeklyодин раз в неделю 0 0 * * 0
@dailyодин раз в день 0 0 * * *
@hourlyежечасно0 * * * *
@midnightВ полночь

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

@daily echo "Проверка cron"

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

# crontab -u username

Отправка уведомлений cron на e-mail

Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.

Настроем параметры отправки e-mail в cron-файле. Добавьте в файл следующие строки:

MAILTO="*@gmail.com"
SHELL=/bin/bash
HOME=/
* * * * * echo "Проверка cron"

MAILTO — укажите свой почтовый ящик

SHELL — оболочка пользователя

HOME — путь к файлу cron

После каждого запуска задачи на указанный email отправляется уведомление:

Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:

* * * * * echo "Проверка cron" >> /var/log/admin/journal.log

Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:

* * * * * echo "Проверка cron" >> /dev/null 2>&1

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

Файлы конфигурации и логи планировщика cron

Основной файл конфигурации демона cron — /etc/crontab. Помимо cron-файла, задачи можно запускать из следующих директорий:

  • /etc/cron.daily – запуск скриптов один раз в день
  • /etc/cron.hourly – запуск скриптов ежечасно
  • /etc/cron.monthly – запуск скриптов раз в месяц
  • /etc/cron.weekly – запуск скриптов раз в неделю

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

Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.

В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.

Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:

Настройка Cron в Linux Debian

Cron — системный демон, используемый для выполнения задач (в фоновом режиме) в указанное время.

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

Конфигурационные файлы

Системный Сrontab: Обычно используется системными службами и критическими заданиями, требующими привилегий root доступа. Шестое поле (см. ниже описание поля) — это имя пользователя которое по умолчанию присвоено команде. Это дает системе возможность запускать команды от разных пользователей.

Пользовательский crontab: Пользователь может установить свои собственные задания cron, используя команду crontab. Шестое поле — это команда для запуска, и все команды будут выполняться от пользователя, который задал их в своем собственном crontab.

Создать или отредактировать собственные задания cron:

  1. crontab -e

  2. no crontab for fito - using an empty one

  3.  

  4. Select an editor. To change later, run 'select-editor'.

  5. 1. /bin/nano <---- easiest

  6. 2. /usr/bin/vim.basic

  7. 3. /usr/bin/mcedit

  8. 4. /usr/bin/vim.tiny

  9.  

  10. Choose 1-4 [1]:

Синтаксис:

  1. 1 2 3 4 5 /path/to/command comnd1 comnd2

  2. или

  3. 1 2 3 4 5 /root/n_sync.sh

Где цифры обозначают:

  • 1: Минуты (0-59)
  • 2: Часы (0-23)
  • 3: День (0-31)
  • 4: Месяц (0-12 [12 == Декабрь])
  • 5: День недели (0-7 [7 или 0 == sunday])
  • /path/to/command — имя скрипта или команды для выполнения по расписанию

Более понятным языком:

  1. * * * * * Команда, которая будет выполнена

  2. - - - - -

  3. | | | | |

  4. | | | | - День недели (0 - 7) (воскресенье = 0 или 7)

  5. | | | --- Месяц (1 - 12)

  6. | | --- День месяца (1 - 31)

  7. | ---- Час (0 - 23)

  8. ----- Минута (0 - 59)

Параметры команды Crontab

  • crontab -e Редактирование или создание файла расписания для текущего пользователя
  • crontab -l Вывод содержимого расписания текущего пользователя
  • crontab -r Удаление файла расписания текущего пользователя
  • crontab -u user Работа с расписаниями конкретных пользователей. Доступно только суперпользователю

Следующие файлы ограничивают доступ к планировщику (по умолчанию они не существуют):

  • /etc/cron.allow — если существует, пользователи указанные в этом файле имеют возможность запуска заданий планировщика;
  • /etc/cron.deny — если существует, пользователи указанные в этом файле НЕ имеют возможность запуска заданий планировщика.

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

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

Как использовать операторы?

  • Звездочка (*): этот оператор задает все возможные значения для поля. Например, звездочка в поле «Часы» будет эквивалентна каждому часу, а звездочка в поле месяца будет эквивалентна каждому месяцу и т.д.
  • Запятая (,): Этот оператор задает список значений, например: «1,5,10,15,20,25».
  • Тире (-): Этот оператор задает диапазон значений, например: «5-15» дней, что эквивалентно набору «5,6,7,8,9 … …, 13,14,15», при использования оператора «Запятая».
  • Слеш (/): этот оператор задает значение шага, например: «0-23 /» можно использовать в поле часов, чтобы указывать выполнение команды каждый час. Шаги также разрешены после звездочки, поэтому, если вы хотите выполнять что-то каждые два часа, просто используйте «*/2».

Первым делом необходимо определить среду. Если указатель оболочки упущен, cron будет использовать значение по умолчанию, которое равно sh. Если переменная PATH не указана, расположение файлов будет абсолютным. Если перемененная HOME упущенная, cron будет использовать домашний каталог.

Кроме того, cron считывает файлы в каталоге /etc/cron.d/. Обычно это файлы демона системы, такие как sa-update или sysstat. В качестве пользователя root, для настройки заданий cron, вы можете использовать каталоги которые указаны ниже. Здесь вы можете напрямую запускать свои скрипты. Команда run-parts запускает скрипты или программы в каталоге через /etc/crontab файл:

  • /etc/cron.d/ Поместите в эту директиву все скрипты и вызовите их из файла /etc/crontab
  • /etc/cron.daily/ Запуск всех скриптов один раз в день
  • /etc/cron.hourly/ Запуск всех скриптов один раз в час
  • /etc/cron.monthly/ Запуск всех скриптов один раз в месяц
  • /etc/cron.weekly/ Запуск всех скриптов один раз в неделю

/etc/crontab — это файл crontab системы. Обычно используется только пользователем root или для настройки системных задач. Обычные пользователи должны использовать команду crontab для установки и редактирования своих заданий. /var/spool/cron/ или /var/cron/tabs/ — это каталог для личных файлов пользователя crontab.

  1. # /etc/crontab: system-wide crontab

  2. # Unlike any other crontab you don't have to run the `crontab'

  3. # command to install the new version when you edit this file

  4. # and files in /etc/cron.d. These files also have username fields,

  5. # that none of the other crontabs do.

  6.  

  7. SHELL=/bin/sh

  8. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

  9.  

  10. # Example of job definition:

  11. # .---------------- minute (0 - 59)

  12. # | .------------- hour (0 - 23)

  13. # | | .---------- day of month (1 - 31)

  14. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

  15. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

  16. # | | | | |

  17. # * * * * * user-name command to be executed

  18. 17 * * * * root cd / && run-parts --report /etc/cron. hourly

  19. 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

  20. 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

  21. 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

  22. #

или

  1. SHELL = /bin/bash

  2. PATH = /sbin:/bin:/usr/sbin:/usr/bin

  3. MAILTO = root

  4. HOME = /

  5. # run-parts

  6. 01 * * * * root run-parts /etc/cron.hourly

  7. 02 4 * * * root run-parts /etc/cron.daily

  8. 22 4 * * 0 root run-parts /etc/cron.weekly

  9. 42 4 1 * * root run-parts /etc/cron.monthly

Сохранение списка заданий в файл

  1. # crontab -l > /path/to/file

  2. # crontab -u user -l > /path/to/file

Пример использования:

  1. # Выполнять скрипт backupscript каждые 5 минут:

  2. */5 * * * * /root/backupscript. sh

  3.  

  4. # Выполнять скрипт backupscript каждый день в час ночи:

  5. 0 1 * * * /root/backupscript.sh

  6.  

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

  8. 15 3 1 * * /root/backupscript.sh

  9.  

  10. # Запуск команды ntpdate каждый час:

  11. @hourly /path/to/ntpdate

  12.  

  13. # Запуск скрипта каждый понедельник в 9:00 и 18:00 часов:

  14. 0 9,18 * * 1 /home/ivan/script.sh

  15.  

  16. # Запуск скрипта каждый день в 0:30 и 12:30:

  17. 30 */12 * * * script.sh

  18.  

  19. # Запуск команды каждый месяц 1 числа в 12:00:

  20. 0 12 1 * * command

  21.  

  22. # Запуск скрипта в полночь с понедельника по пятницу:

  23. 0 0 * * 1-5 /home/ivan/script.sh

Как настроить задание Cron в Linux? {Расписание задач}

Введение

Демон Cron — это встроенная утилита Linux, которая запускает процессы в вашей системе в запланированное время. Cron считывает crontab  (таблицы cron) для предопределенных команд и сценариев.

С помощью специального синтаксиса можно настроить задание cron для планирования автоматического запуска сценариев или других команд.

В этом руководстве с примерами показано, как настроить задание cron в Linux.

Пререквизиты

  • Система, работающая на Linux
  • Доступ к командной строке/окно терминала ( CTRL ALT T или - ALT - F2 )

    66 - ALT - F2 )

  • 9 2 - ALT - F2 )

    9002 - ALT - F2 )

    9002 9006 - ALT - F2 ) учетная запись с правами root или sudo  привилегиями

Базовый синтаксис Crontab

Cron считывает файлы конфигурации для получения списка команд для выполнения. Демон использует специальный синтаксис для интерпретации строк в crontab таблицы конфигурации.

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

 a b c d e /directory/command output 

Таким образом, частями команды cron являются:

1. Первые пять полей a b c d 1 e 90 время/дата и повторение задания.

2. Во второй секции /directory/command указывает расположение и сценарий, который вы хотите запустить.

3. Последний сегмент вывод является необязательным. Он определяет, как система уведомляет пользователя о завершении задания.

1. Формат времени задания Cron

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

В таблице ниже приведены возможные значения полей и пример синтаксиса:

Field Possible Values ​​ Syntax Description
[a] – Minute 0 – 59 7 * * * *  The Задание cron запускается каждый раз, когда системные часы показывают 7 в минутной позиции.
[b] – Час 0 – 23 0 7 * * * ).
[c] – День 0 – 31 0 0 7 * * День месяца 7, что означает, что задание выполняется каждые 7 числа числа месяца.
[d] — Месяц 0 = нет и 12 = декабрь 0 0 0 7 * Числовое значение месяца равно 7, что означает, что задание выполняется только в июле.
[e] — день недели 0 = воскресенье и 7 = воскресенье 0 0 * * 7  7 в текущей позиции означает, что задание будет выполняться только по воскресеньям.

2. Команда для выполнения

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

 /root/backup.sh 

В нашем примере команда просматривает корневой каталог системы и запускает backup.sh скрипт. Вы можете указать любой сценарий или команду, которую пожелаете.

3. Вывод (необязательно)

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

Поскольку это необязательная функция, вы можете предотвратить этот сценарий, отключив вывод электронной почты. Чтобы отключить вывод электронной почты, добавьте следующую строку: >/dev/null 2>&1 , после полей времени и команды.

 * * * * * каталог/команда >/dev/null 2>&1 

4. Использование операторов (необязательно)

Для повышения эффективности синтаксис cron также использует операторы. Операторы — это специальные символы, которые выполняют операции над указанными значениями в поле cron.

  • Звездочка (*) обозначает все значения. Используйте этот оператор, чтобы задачи выполнялись все месяцы или все дни недели.
  • Запятая (,) указывает отдельные значения.
  • Дефис (–) указывает диапазон значений.
  • Косая черта (/) используется для разделения значения на шаги. (*/2 — каждое второе значение, */3 — каждое третье, */10 — каждое десятое и т. д.)

Настройка задания Cron

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

Как редактировать файл crontab?

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

 crontab –e 

Вы можете добавить любое количество запланированных задач, по одной в строке.

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

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

Редактировать crontab для другого пользователя

Чтобы отредактировать crontab для другого пользователя, введите следующую команду:

 crontab –u другое_имя_пользователя –e 

Примечание: Если вам нужно запустить задание cron при перезагрузке, обратитесь к нашему руководству Crontab on Boot.

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

При указании заданий используйте звездочку, чтобы указать все значения. Ввод значения в одно из полей запускает команду только для этого значения. Например:

 * 2 0 * 4 /root/backup.sh 

Несмотря на то, что он настроен на 2 часа ночи, он запускается только тогда, когда первое число месяца (0) приходится на среду (4). Если вы измените на следующее:

 * 2 0 * * /root/backup. sh 

Команда запускается первого числа каждого месяца в 2 часа ночи. В следующей таблице представлены несколько основных команд с использованием файла /root/backup.sh из наших предыдущих примеров.

Крон. Каждые 30 минут 30 * * * * /root/backup.sh
Run Cron Job Every Hour 0 * * * */root/backup.sh
запустить работу Cron каждый день в полночь 0 0 * * * /root/backup.sh
Запуск Cron. корень/backup.sh
Run Cron Job Every 1 st  of the Month 0 0 1 * * /root/backup.sh
Run Cron Job Every 15 th  of the Month 0 0 15 * * * /root/backup. sh
РЕБЕР CRON 1 декабря ST - Midnight 0 0 0 12 * //back
Запустить задание Cron в субботу в полночь 0 0 * * 6 /root/backup.sh

Использование специальных символов

Для разделения строки на шаги можно использовать временные интервалы. Для запуска резервного копирования каждые 15 минут:

 */15 * * * * 

* означает все значения, а /15 подсчитывается и повторяется каждые 15 минут.

Используйте дефис для указания диапазона. Чтобы запускать код каждый будний день в 4 утра:

 0 4 * * 1-5 /root/backup.sh 

В этом случае 1-5 указывает понедельник - пятница.

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

 0 4 * * 2,4 /root/backup. sh 

Это запустит код в 4 утра во вторник и четверг.

Некоторые подстановочные знаки можно комбинировать. Запустите команду через день в 37 минут после часа:

 37 1-23/2 * * * /root/backup.sh 

1-23 указывает диапазон часов, /2 устанавливает интервал через каждый час.

Список существующих заданий Cron

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

 crontab –l 

Примечание: Ознакомьтесь с сообщением о команде at, альтернативе работе cron.

Заключение

Теперь вы хорошо понимаете, как пользоваться cron для планирования задач в Linux. Используйте примеры, представленные в этом руководстве, чтобы создавать и планировать задания cron в вашей системе. Со временем расширяйте задачи, используя специальные символы, чтобы автоматизировать большинство ваших рутинных задач.

Дополнительные руководства по заданиям Cron см. в нашем руководстве Kubernetes CronJob.

Как настроить задание Cron?

Спросил

Изменено 2 года, 6 месяцев назад

Просмотрено 1,2 млн раз

Я хочу запланировать выполнение задачи на регулярной основе и слышал, что для этого можно использовать Cron.

Как добавить задания Cron в Ubuntu?

Поместите сценарий оболочки в одну из следующих папок: /etc/cron.daily , /etc/cron.hourly , /etc/cron.monthly или /etc/cron.weekly .

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

 кронтаб -е
 

Откроется ваш личный crontab (файл конфигурации cron). Первая строка в этом файле все объясняет! В каждой строке вы можете определить одну команду для запуска и ее расписание, и формат довольно прост, когда вы его освоите. Структура:

 минута час день месяца месяц день недели команда
 

Для всех номеров можно использовать списки, напр. 5,34,55 в поле минут будет означать запуск в 5 мин, 34 мин и 55 мин, независимо от того, какой час установлен.

Вы также можете использовать интервалы. Они определяются так: */20 . Этот пример означает каждую 20-ю, поэтому в столбце минут это эквивалентно 0,20,40 .

Итак, запускать команду каждый понедельник в 5:30 дня:

 30 17 * * 1 /path/to/command
 

или каждые 15 минут

 */15 * * * * /path/to/command
 

Обратите внимание, что день недели идет от 0 до 6, где 0 — воскресенье.

Подробнее читайте здесь.

10

Если задание, которое вы хотите запустить, может быть запущено с теми же привилегиями, что и ваш пользователь, я рекомендую использовать пользовательский crontab, который вы можете редактировать, запустив EDITOR="gedit" crontab -e (который будет использовать gedit для редактирования crontab файл) или просто crontab -e (который будет использовать редактор по умолчанию) в терминале.

Если вы хотите запускать что-то, например, каждые 10 минут, добавьте такую ​​строку

 */10 * * * * /usr/bin/somedirectory/somecommand
 

и сохраните файл.

Вы можете просмотреть содержимое пользовательского crontab командой crontab -l .

Чтобы добавить задание cron, которое запускается от имени root, вы можете отредактировать crontab root, запустив sudo crontab -e .

Самый гибкий способ — использовать системный crontab /etc/crontab , который вы можете редактировать только с привилегиями root. В этом файле пользователь должен запускать каждую команду, как указано, поэтому вы можете запускать свои команды от имени пользователя root (если вам нужен этот уровень привилегий) или любого другого пользователя в системе.

Например, если вы хотите запускать что-то каждые 10 минут от имени пользователя root, вы должны добавить такую ​​строку:

 */10 * * * * root /usr/bin/somedirectory/somecommand
 

(обратите внимание на добавление пользователя в строку)

Вы можете увидеть содержимое системного файла crontab с помощью cat /etc/crontab .

Более подробная информация на: https://help.ubuntu.com/community/CronHowto

1

Если вы предпочитаете делать это с помощью графического интерфейса, вы можете перейти в Центр программного обеспечения и установить Запланированные задачи (или запустите sudo apt-get install gnome-schedule ). Он предоставит мощный графический интерфейс для добавления задач cron.

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

3

Я рекомендую планировщик заданий KDE ( kde-config-cron ). Получите к нему доступ из Системных настроек в модуле Task Scheduler .

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

Я хотел настроить задание Cron для запуска сценария bash, поэтому выполнение сценария добавило бы задание cron.

Я понял, что когда вы используете:

 crontab -e
 

Затем он создает файл:

/var/spool/cron/crontabs/root

Где root — это имя пользователя, запускающего команду crontab. Итак, исходя из этого и, по крайней мере, в 14.04, мы можем выполнить следующие команды bash для создания нового задания Cron:

 эхо "30 17 * * 1 /путь/к/команде" > /var/spool/cron/crontabs/root
 

Нам также необходимо установить правильное право собственности на файл:

 chown root:root /var/spool/cron/crontabs/root
 

И установите правильные разрешения:

 chmod 600 /var/spool/cron/crontabs/root
 

Если при запуске crontab -e в списке уже есть задания Cron, вы можете добавить их в список с помощью следующей команды:

 echo "30 17 * * 1 /path/to/command" > > /var/spool/cron/crontabs/корень
 

Планировщик заданий KDE не будет работать в обычной Ubuntu. Он работает только в системах KDE, таких как KUbuntu. Для системы, отличной от KDE, вы предпочтете использовать gnome-schedule

 $ sudo apt-get install gnome-schedule
 

Приложение Запланированные задачи в тире.

2

Пример запуска скрипта test_cron.sh cron каждую минуту в Ubuntu 18.04 с использованием символической ссылки:

test_cron.sh файл:

 #!/bin/bash
echo "Резервная копия системы" >> /media/myname/data/backup/backup_tmp.log
 

Если вы хотите использовать переменные среды в своем скрипте, такие как $USER в путях, лучше ввести точный путь, bash не будет знать ваши переменные во время выполнения.

myname — это имя пользователя (часть корневой группы, я не уверен, что привилегии root необходимы).

Разрешить пользователям устанавливать задания cron, при необходимости будет создан файл:

 sudo nano /etc/cron. allow
корень
Мое имя
 

Путь к скрипту: /home/myname/shell/test_cron.sh

Я сменил владельца и сделал его исполняемым:

 sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh
 

Я добавил символическую ссылку:

 sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron
 

Зарегистрирован как myname Я добавил новую задачу для выполнения test_cron каждую минуту.

 кронтаб -е
*/1 * * * * test_cron
 

Проверить наличие команды в списке:

 crontab -l
*/1 * * * * test_cron
 

Для проверки выполнения

 grep -i cron /var/log/syslog
17 ноября 12:28:01 myname-ubuntu CRON[13947]: (мое имя) CMD (резервная копия системы)
 

Учитывая, что у вас есть несколько заданий cron с конкретным пользователем, и они не используют одно и то же расписание. Вы можете просто создать файл под /etc/cron. d/ Допустим, имя файла myjobs , тогда просто запишите все свои планировщики в этот файл, а затем выполните следующую команду.

crontab -u <имя пользователя> /etc/cron.d/myjobs

Как настроить Crontab в Linux

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

Демон cron запускается автоматически из /etc/init.d при переходе на многопользовательский уровень запуска. Задания cron перечислены в файлах crontab и расположены в области буфера cron /var/spool/cron/crontabs. Cron ищет эти файлы и загружает их в память для выполнения. Другой файл, который читает cron, это /etc/crontab. В Debain и Ubuntu /etc/crontab ежедневно, ежечасно, еженедельно и ежемесячно выполняет программы, написанные в каталогах /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly и /etc/cron.monthly.

Crontab — это утилита, которая поддерживает файлы crontab для отдельных пользователей. Файл Crontab представляет собой простой текстовый файл со списком команд, которые выполняются в определенное время. Рекомендуется использовать команду crontab для доступа и обновления файлов crontab в /var/spool/cron/crontabs. Crontab означает «таблицу cron», которую демон cron использует для планирования заданий. У каждого пользователя есть файл crontab, который регулярно проверяется демоном cron, независимо от того, действительно ли пользователь вошел в систему или нет.

В панели управления Webdock легко управлять записями Crontab для любого пользователя на вашем сервере. Просмотрите экран сервера Cron Jobs для получения дополнительной информации.

Начало работы с Crontab

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

crontab -e 

Это откроет файл crontab в вашем любимом редакторе, расположенном в /var/spool/cron/crontabs/edward (edward — это наше имя пользователя в этом примере, оно может отличаться в вашем случае). Вывод приведенной выше команды будет (наш редактор здесь nano):

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

Поля и допустимые диапазоны Crontab

Поле

Описание

Допустимое значение

МИН

Поле минут

0-59

ЧАС

Поле часов

0-23

ДОМ

День месяца

1-31

ПН

Поле месяца

1-12

ДОУ

День недели

0-6

CMD

Команда

Любая команда должна быть выполнена

Любое из этих полей также можно задать с помощью подстановочного знака (*), который означает «с первого по последний». Например, чтобы запускать задание каждый час, поставьте * в поле часа. Вы также можете указать диапазон чисел во всех пяти полях, связанных с датой и временем. Диапазоны — это два числа, разделенные дефисом. Например, поле 5-8 в часах указывает выполнение в 5, 6, 7 и 8 часов.

Давайте создадим практический пример планирования с помощью crontab. У нас есть небольшой файл сценария, который будет пинговать www.google.com в 14:22 8 сентября независимо от дня недели. Мы создаем сценарий оболочки со следующим содержимым и помещаем его в /tmp/bill.sh.

nano /tmp/bill.sh 

Если у вас не установлен nano, сделайте это с помощью «sudo apt install nano -y»

Содержимое скрипта:

 #!/бин/баш
 СЕЙЧАС=`дата`
 echo "Задание cron выполнялось с $NOW" >> /tmp/jobresult

 

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

chmod +x /tmp/bill.sh 

После того, как crontab запустит ваш скрипт, вы должны увидеть файл в /tmp/jobresult. Если вы просматриваете содержимое этого файла или следите за обновлениями этого файла с помощью «tail -f /tmp/jobresult», вы должны увидеть его обновление с новой строкой, указывающей, что задание Cron было запущено в определенное время.

Чтобы запустить этот скрипт в запланированные дату и время, мы вводим правильные поля в наш файл Crontab:

На скриншоте выше показано, что мы настроили наш crontab для запуска этого скрипта в 14:22 8 сентября. Сохраните и выйдите, и вы получите сообщение об обновлении Crontab.

Вот еще один пример: Следующая строка будет запускать наш скрипт каждый час, в начале часа, с 6 до 10 утра каждый день:

0 6-10 * * * /tmp/bill.sh 

Чтобы просто распечатать файл Crontab для вошедшего в систему пользователя на экране, вы можете использовать следующую команду:

crontab -l 

Это показывает, что в системе запланировано только одно задание cron. Вы можете запланировать более одного задания. просто добавив дополнительные строки в ваш файл Crontab. Чтобы удалить записи в таблице cron, просто отредактируйте свой Crontab, как и раньше, и удалите или закомментируйте строку

. По умолчанию crontab редактирует записи текущего вошедшего в систему пользователя. Если вы хотите отредактировать Crontab для другого пользователя, используйте следующую команду:

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

Вы также можете использовать следующую команду для просмотра записей crontab другого пользователя:

crontab -u имя пользователя -l 

Ограничение доступа к crontab.

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

Например, если вы хотите разрешить пользователям root и edward доступ к команде crontab, создайте новый файл /etc/cron.d/cron.allow, как показано ниже:

nano /etc/cron.d/cron.allow 

Добавьте следующие строки:

корень
Эдвард
 

Сохраните и закройте файл, когда закончите.

Теперь только root и пользователь edward имеют доступ к команде crontab.

Журналы Cron

Журналы Cron — это важный способ проверить, выполняются ли задания cron вовремя или нет. Чтобы просмотреть журнал cron, выполните следующую команду:

кот /var/log/syslog | grep cron 

Вы также можете настроить файл cron.log, перейдя в файл /etc/rsyslog.d/50-default.conf и раскомментировав следующую строку.

nano /etc/rsyslog.d/50-default.conf 

Раскомментируйте следующую строку:

#cron.* /var/log/cron.log 

Синтаксис Crontab с примерами

В этом разделе мы покажем вам различные синтаксис crontab с примерами.

МИН

ЧАС

ДОМ

ПН

ДОУ

ОПИСАНИЕ

10

09

05

02

*

Выполнить задание 5 th Feb 09:10

*

*

*

*

*

Выполнять задание каждую минуту каждого часа каждого дня

10

14

*

*

*

Выполнять задание каждый день в 14:10

*/5

*

*

*

*

Выполнять задание каждые 5 минут каждого часа каждого дня

15

15

*

*

1-4

Выполнение задания в 15:15 с понедельника по пятницу

10

05

2

*

*

Выполнять задание каждый месяц 2 числа в 05:10

00

08,11

*

*

*

Выполнять задание каждый день в 08:00 и 11:00

00

10-18

*

*

*

Выполнять задание каждый день в каждый час с 10:00 до 18:00

00

*/2

*

*

*

Выполнять задание каждые 2 часа каждый день

00

11

*

марта,

декабря

*

Выполнение задания в марте и декабре в 11:00

@почасовой

Выполнять задание раз в час

@ежедневно

Выполнять задание один раз в день

@еженедельно

Выполнять задание раз в неделю

@ежемесячно

Выполнять задание раз в месяц

@ежегодно

Выполнять задание раз в год

при перезагрузке

Выполнить задание при загрузке системы

Заключение

В приведенном выше руководстве мы узнали, как планировать задачи с помощью crontab в Linux на нескольких примерах.