Главная > Операционные системы > UNIX
Описание:
Кандидат должен понимать разницу между системным crontab
и пользовательским. В добавок, он должен владеть редактором
crontab, разбираться в его полях и понимать важность
предварительного тестирования скрипта перед тем как записать его в
crontab. Кандидат так же должен знать про то, что он может создать
файлы Практика: crontab(1), cron(8),
Комментарий
Система cron предназначена для запуска заданий по расписанию.
Написан cron программистом Паулем Викси (Paul Vixie). Как и
многие другие популярные программы, cron имеет множество
инкарнаций. Больше того, существует множество разных
vixie-cron'ов. В основном авторы клонов cron'а занимались тем,
что добавляли те или иные удобства в синтаксис файла
Итак, демон cron раз в минуту перечитывает все crontab-файлы, системный и пользовательские.
Системный файл crontab расположен в каталоге /etc. рассмотрим пример: Пример 7.1. Системный crontab файл # /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # #minute hour mday month wday who command # */5 * * * * root /usr/libexec/atrun # # Save some entropy so that /dev/random can re-seed on boot. */11 * * * * operator /usr/libexec/save-entropy # # Rotate log files every hour, if necessary. 0 * * * * root newsyslog # # Perform daily/weekly/monthly maintenance. 1 3 * * * root periodic daily 15 4 * * 6 root periodic weekly 30 5 1 * * root periodic monthly # # Adjust the time zone if the CMOS clock keeps local time, as opposed to # UTC time. See adjkerntz(8) for details. 1,31 0-5 * * * root adjkerntz -a Как видно, в начале этого файла задаются некоторые переменные окружения. Стоит обратить внимание на некоторые из них:
Далее следуют пять полей отвечающих за время, когда будет выполнено задание: минуты, часы, дни (месяца), месяца и дни недели. Касательно дней недели следует заметить, что их не 7, как кто-то мог подумать, а 8: 0 и 7 соответствуют воскресенью. Таким образом, те кто считают, что первый день недели это понедельник, могут отсчитывать дни с единицы, а кто думает, что первый день недели это воскресенье — с нуля.
Формат каждого поля: числа должны перечисляться через запятую.
0 * * * * root cmd 0 0-23 * * * root cmd 0 0,1,2-23 * * * root cmd
Можно задавать через # следующие два задания выполняются каждый чётный час 0 */2 * * * root cmd 0 0-23/2 * * * root cmd # а следующее задание выполняется каждый НЕчётный час 0 1-23/2 * * * root cmd BSD варианты файла crontab допускают использование ключевых слов вместо пяти полей отвечающих за дату: Таблица 7.16. Короткие имена используемые в
Шестое поле системного файла crontab указывает на то, от чьего имени будет выполнено задание. И, наконец, седьмое поле — сама задача.
# Поздравляем пользователя root с новым годом # и высылаем ему содержимое файла /etc/motd @yearly root echo "Счастливого нового года!"%/bin/cat /etc/motd # Эквивалентная форма записи: @yearly root echo "Счастливого нового года!"; /bin/cat /etc/motd # каждую минуту посылаем пользователю root письмо в котором написано # сколько времени * * * * * root /bin/date '+\%x \%c' Вернёмся к системному файлу crontab. Обратите внимание на строки приведённые ниже между отточиями: # /etc/crontab - root's crontab for FreeBSD # # $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # #minute hour mday month wday who command # ........................................................................ # Perform daily/weekly/monthly maintenance. 1 3 * * * root periodic daily 15 4 * * 6 root periodic weekly 30 5 1 * * root periodic monthly ........................................................................ В других (не BSD) системах вместо отточенных строк было бы что-то вроде: # Perform daily/weekly/monthly maintenance. 1 3 * * * root run-parts /etc/cron.daily 15 4 * * 6 root run-parts /etc/cron.weekly 30 5 1 * * root run-parts /etc/cron.monthly Скрипт run-parts заходит внутрь указанных каталогов и выполняет все найденные в них сценарии.
В FreeBSD принят иной механизм, более сложный
и гибкий: имеется sh-сценарий
/usr/sbin/periodic, который получает аргумент
daily, или weekly, или monthly, или security. Этот скрипт
изучает переменные заданные в файлах
Сами периодически выполняемые скрипты могут находиться в
каталогах
Недокументированной особенностью скрипта
periodic является его относительная
всеядность к аргументам. Например, вы можете создать собственный
каталог с заданиями расчитанными на ваш период
В OpenBSD и NetBSD системный crontab отсутствует (что не означает, что его не может быть в принципе). Все действия осуществляются путём работы с пользовательскими crontab'ами (в том числе crontab пользователя root). Каталогов с периодически выполняемыми заданиями тоже нет. Вместо них имеются shell сценарии /etc/daily, /etc/weekly и /etc/monthly запускаемые из crontab пользователя root и настраиваемые при помощи файлов /etc/daily.conf, /etc/weekly.conf и /etc/monthly.conf соответственно.
В OpenBSD соответствующую справку можно
получить из страниц man Пользовательский crontab файл отличается от системного тем, что в нём нет шестого поля с указанием от чьего имени выполняется команда. Команда может выполняться только от имени владельца файла crontab. Расположены пользовательские crontab файлы в каталоге /var/cron/tabs и названы по именам пользователей. Владельцем всех crontab файлов является root. Таким образом, если пользователь окажется переименован, но его UID останется прежним это не спасёт его от потери своего файла crontab. Это редкий случай когда в UNIX нечто завязано не на UID, а именно на имя пользователя.
Пользовательские файлы crontab создаются при помощи утилиты
crontab(1). Будучи запущена пользователем
user с аргументом Можно рекомендовать администратору не править системный crontab с целью внедрения в него своих скриптов, дабы облегчить себе работу с mergemaster(8) при обновлении системы. Вместо этого удобнее править crontab пользователя root $ sudo crontab
Имеется способ ограничить пользователей в написании файлов
crontab: файлы
Главная > Операционные системы > UNIX |