HPUNIX Сайт о ОС и не только!

Настройка cron планировщика в Linux

24 ноября 2008 - unix

#image.jpgВ прошлой теме о демоне syslogd и команде logrotate, я упоминал о планировщике Linux - cron. На данный момент в своем блоге я более кропотливо расскажу о работе данного планировщика.

cron

Планировщик задач в Linux играет незаменимую роль в автоматизации администрирования операционной системы. Роль планировщика задач делает бес cron (crond - в некоторых дистрибутивах). Бес cron обычно запускается процессом init в момент запуска системы.

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

cron:~#cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
# run-parts Один * * * * root run-parts /etc/cron.hourly Два 4 * * * root run-parts /etc/cron.daily 20 два 4 * * Нуль root run-parts /etc/cron.weekly 40 два 4 Один * * root run-parts /etc/cron.monthly

В /etc/crontab задания выполняются с помощью команды run-parts, которая запускает скрипты и программы из обозначенных каталогов (/etc/cron.hourly, /etc/cron.daily и т.д.).

Неважно какая строка запускает из соответствующего каталога задания раз в час, раз в денек, раз в неделю и каждый месяц, соответственно строкам сверху вниз. Обратите внимание, что все команды здесь запущены от имени пользователя root. Заметьте также, что crontab может содержать присваивания значений переменным shell, которые будут установлены перед запуском команды.

Так же, если необходимо запускать какие-то команды по особому расписанию (не раз в час, раз в денек, раз в неделю и каждый месяц), то таблицы заданий помещаются в каталог /etc/cron.d/.

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

/var/spool/cron - RedHat
/var/spool/cron/crontabs - debian,ubuntu
/var/spool/cron/tabs - SUSE

Неважно какая строка планировщика имеет следующий формат:

* * * * * {юзер} выполняемая_команда - - - - - | | | | | | | | | ----- День недели (0 - 7) (Воскресенье =0 или =7) | | | ------- Месяц (1 - 12) (можно три буквы из наименования месяца, | | |                        регистр не имеет значения от jan до dec) | | --------- День (1 - 31) | ----------- Час (0 - 23) ------------- Минута (0 - 59)

В примере показан формат одной из строки таблицы, состоящий из Семь полей.

1-ые 5 полей  - это значения, задающие периодичность выполнения команды (расписание). 6-e поле находится только в таблицах /etc/crontab и др. расположенных в каталоге /etc/cron.d/. 7-е поле есть сама запускаемая команда.

Командой может быть как рядовая команда, например, ls /proc >> /tmp/proc, или команда запуска написанного вами специального сценария. Со всей оставшаяся частью строки до знака перевода строки или знака %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab. Знак процента (`%' ) в команде (если он не экранирован обратной косой чертой (`\' ) ) будет соответствовать символу перевода строки и все данные после первого `%'  будут посланы для команды на стандартный ввод.

Для обозначенных выше первых 5 полей, можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, обозначенное другими параметрами.

Дефис (-) меж целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, Три и 4.

Список значений, разбитых запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, Восемь означает четыре обозначенных целых числа.

Косая черта (/) употребляется для определения шага значений. Если после диапазона указать /<целое_число>. Например, значение минут 0-59/2, определяет, что задание будет запущено каждую вторую минуту.

Вся оставшаяся часть строки до знака перевода строки или знака %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab Знак процента (`%' ) в команде (если он не экранирован обратной косой чертой (`\' ) ) будет соответствовать символу перевода строки и все данные после первого `%'  будут посланы для команды на стандартный ввод.

Пример crontab-файла:

Настройка cron планировщика в Linux
# выполнить команды hello каждый понедельник  в 3:30 30 3 * * mon hello # выполнить команду hello в 1-ый день каждого месяца в 4:10 10 4 Один * * hello # делать каждый день в Нуль часов 5 минут, результат ложить в log/daily 5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1 # каждый рабочий день в 22:00 Нуль 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john 20 три */2 * * * echo "Делается в 0:23, 2:23, 4:23 и т. д." 5 4 * * sun echo "Делается в 4:05 в воскресенье" Нуль 0 Один 1 * echo "С новым годом!" Пятнадцать 10,13 * * 1,4 echo "Эта надпись выводится в пн и четверг в 10:15 и 13:15" 0-59 * * * * echo "Делается ежеминутно" # каждые 5 минут */5 * * * * echo "Прошло 5 минут"

anacron

Настройка cron планировщика в Linux

anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с данным интервалом времени.

WordPress Tutorial - Cronjob - WordPressTutorials.TV

Это очень комфортабельно для систем которые работают редко, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий.

При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, не считая полей таблиц:

* * * выполняемая_команда - - - | | | | | --------- идентификатор | ----------- задержка ------------- период

Период — период выполнения в днях. Задержка — задержка запуска в минутах.

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

На сегодня все. Давайте подведем маленькой итог тому что на данный момент узнали:

В Linux есть такой чудо бес - cron. Бес cron при загрузке, а так же - после загрузки каждую минуту "шерстит" файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в "просматриваемом" файле и запускает обозначенную команду, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.

Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, обозначенного в /etc/anacrontab и если прошел обозначенный просвет времени, то задание запускается.

PHP Task Scheduler PHP Cron (PHP Script)

Похожие статьи

  • Переменные Linux

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

  • Постоянные выражения, базы для работы в Linux

    Неплохого времени, гости!В сегодняшней статье желаю коснуться такой большой темы как Неизменные выражения. Думаю всем понятно, что тема регексов (так неизменные выражения называются на сленге) - неох...

  • Главные команды Linux

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

  • Управление бесом syslogd и журналированием в Linux

    На данный момент на речь пойдет о журналировании в Linux. Функция системного журналирования (т.н. "логи" или логирование) - это основной источник инфы о работе системы и ошибках. Журналирование может осущ...

  • Программные каналы и потоки Linux (UNIX), перенаправление потоков

    Неплохого времени, читатели моего блога!В данной статье желаю систематизировать свои зания по основным механизмам работы программных потоков и каналов в интерпретаторе и в общем в ОС Linux, а так ж...

Теги: ос linux, ос
Рейтинг: +18 Голосов: 65 1595 просмотров
Комментарии (0)

Нет комментариев. Ваш будет первым!

Найти на сайте: параметры поиска

Windows 7

Среда Windows 7 на первых порах кажется весьма непривычной для многих.

Windows 8

Если резюмировать все выступления Microsoft на конференции Build 2013.

Windows XP

Если Windows не может корректно завершить работу, в большинстве случаев это

Windows Vista

Если к вашему компьютеру подключено сразу несколько мониторов, и вы регулярно...