IT-Service - Планировщик задач Cron
Понедельник, 24 Сентябрь 2012 05:09

Планировщик задач Cron

Автор  green
Оцените материал
(0 голосов)

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

 


Демон cron может запускать задачу не только для системы в целом, но и для отдельного пользователя. Файлы, которые описывают, что и когда будет запускаться для отдельного пользователя находятся в каталоге /var/spool/cron/crontabs/. Доступ к этому каталогу есть только у пользователя root.


Внутри каталога /var/spool/cron/crontabs/ для каждого пользователя создается текстовый файл по имени (логину) пользователя в котором и хранятся настройки. Например, если в системе есть пользователь test и он настраивал для себя cron, то будет создан файл с настройками - /var/spool/cron/crontabs/test. Пользователь test прямого доступа к этому файлу не имеет. Для редактирования этого файла используется команда crontab.

Для того, чтобы проверить, запущен ли процесс cron, выполните команду:

ps ax | grep [c]ron
1026 ?        Ss     0:00 cron

Если демон не запущен запустить его можно как и любой другой демон командой /etc/init.d/cron start, выполненной от имени администратора.


Cron работает в поминутном режиме. То есть задать время выполнения того или иного задания можно с точностью до одной минуты. Основной конфигурационный файл демона cron - это /etc/crontab. Основная часть файла - это таблица в 7 столбцов, каждая строка, которой описывает одно задание. Файлы, которые описывают задания дляcron, также часто называют crontab-файлами.

Пример файла /etc/crontab:

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


Каждой строке задаются значения 7-ми полей:

m - minute - минута - на какой минуте выполнять задание; диапазон значений - (0-59)

h - hour - час - в котором часу выполнять задание; диапазон значений (0-23)

dom - day of month - день месяца - в какие дни месяца выполнять задание; диапазон значений (1-31)

mon - month - месяц - в какие месяцы года выполнять задание; диапазон значений (1-12)

dow - day of week - день недели - в какие дни недели выполнять задание; диапазон значений (0-7, 0 и 7 - это воскресенье, дальше по порядку)

user - имя пользователь - пользователь от имени которого будет выполнено задание

command - исполняемая команда - команда, которая будет запущена на выполнение в указанное время.


В первых пяти полях можно указывать не только число из диапазона, но и диапазон чисел, перечисление чисел, диапазон с шагом. Символ * - означает любое значение. Подробно почитать о значениях можно в man 5 crontab. Рассмотрим несколько примеров.

 

Запускать команду myscript каждый день, в 6 часов 10 минут утра:

10 6 * * * root myscript

Запускать команду myscript первого числа каждого месяца в 5 часов утра:

0 5 1 * * root myscript

Запускать команду myscript в рабочие дни (кроме субботы и воскресенья) в 23 часа 30 минут:

30 23 * * 1-5 root myscript

Запустить команду myscript 1,3,7,15-го числа, месяца января и июля в 23 часа:

0 23 1,3,7,15 1,7 * root myscript

Запускать команду каждые три часа. То есть первый запуск будет в 0:30, затем в 3:30 и т.д:

30 0-23/3 * * * root myscript

Запускать команду каждые 5 минут (*/5 - без пробелов):

*/5 * * * * root myscript


Будьте внимательны с полями 3 и 5 - день месяца и день недели. Если числа есть в обоих полях, например * 6 5 * 1 root myscript, то запись означает запускать задание в шесть часов 5-го числа каждого месяца или каждый понедельник, но не каждый понедельник 5-го числа. То есть день недели и день месяца не зависят друг от друга.

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

Обычные пользователи также могут создавать свои crontab-файлы и редактировать их, если обратное не запрещено администратором. Для редактирования crontab-файлов предназначена команда crontab. Зарегистрируйтесь в системе под учетной записью обычного пользователя (например test) и наберите команду crontab -e. Вы попадете в редактор, в котором нужно будет набрать задание. В пользовательских crontab-файлах отсутствует поле user, так как оно вычисляется демоном cron из названия самого файла, который будет после редактирования сохранен в каталоге /var/spool/cron/crontabs/ под именем test. Наберите в нем строку с заданием, например:

29 12 * * * touch testfile

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

ls -l [0-9]*

-rw-r--r-- 1 test test 0 2010-01-11 12:16 testfile

Как видите файл testfile был создан. Также из под учетной записи администратора можете проверить, что был создан и файл /var/spool/cron/crontabs/test:

 

sudo ls -l /var/spool/cron/crontabs/

-rw------- 1 test crontab 266 2010-01-11 12:13 test

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

Прочитано 4153 раз Последнее изменение Вторник, 02 Октябрь 2012 11:03
Другие материалы в этой категории: « SSH сервер и клиент Проблемные шрифты в Ubuntu »
Авторизуйтесь, чтобы получить возможность оставлять комментарии