Cron - это программа, выполняющая задания по расписаню. Позволяет неоднократный запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени. Формат и значения полей, для пользовательских файлов crontab, будут приведены в конце статьи.
При загрузке системы, запускается демон cron и проверяет очередь заданий at и заданий пользователей в файлах crontab. При запуске, демон cron сначала проверяет каталог /var/spool/cron на наличие файлов crontab, файлы crontab имеют имена пользователей, соответствующие именам пользователей из /etc/passwd Каждый пользователь может иметь только один файл crontab, записей в файле может быть несколько.
Другими словами - файлы crontab содержат инструкции для демона cron, который запустит задание(я) описаное в файле crontab. Все файлы crontab из каталога /var/spool/cron загружаются в память, одновременно с ними загружаются файлы из /etc/cron.d После этого демон cron загружает содержимое файла /etc/crontab При стандартных настройках, содержимое /etc/crontab имеет следующий вид:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Информация файла указывает, что:
содержимое каталога /etc/cron.hourly будет запускаться каждый час на первой минуте часа.
содержимое каталога /etc/cron.daily будет запускаться каждый день на второй минуте четвертого часа.
содержимое каталога /etc/cron.weekly будет запускаться каждое воскресенье на двадцать второй минуте четвертого часа.
содержимое каталога /etc/cron.monthly будет запускаться каждый первый день месяца на сорок второй минуте четвертого часа.
SHELL=/bin/bash означает использовать для запуска команд /bin/bash , если переменная не указана, то значение будет взято из /etc/passwd для пользователя являющимся владельцем файла.
HOME=/ корневой каталог для пользователя (параметр не обязательный) При необходимости доступа к специальным свойствам интерпретатора, значения переменных SHELL и HOME можно изменить, не зависимо от того, что прописано в /etc/passwd
MAILTO=root означает кому отсылать сообщение о результате работы команд.
Все содержимое из этих каталогов будет запускаться с правами доступа пользователя root и файлы должны иметь права доступа на "выполнение" (про права доступа читай статью http://rst.void.ru/texts/chmod.txt ) Поэтому перед размещением файлов в одном из этих каталогов необходимо убедиться, что сценарии не насесут вред системе.
После того, как демон cron запущен и прочел содержимое всех файлов crontab, он бездействует, просыпаясь каждую минуту и проверяя не требуется ли запуск какой-либо команды в данную минуту, или не появился ли новый файл crontab который необходимо обработать. Демон cron определяет изменения по времени модификации файлов или каталогов, такое его свойство избавляет от необходимости перезапуска демона.
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
доступно только пользователю root, для использования файлов crontab пользователями, нужно использовать команду crontab. Команда служит для создания, изменения и добавления файла для демона cron
Пример
Рассмотрим пример создания файла crontab для пользователя user, домашняя директория /home/user
Задача: запускать каждую минуту файл /home/user/mail, который будет отправлять почту
Содержимое файла mail (файл должен быть с правами на запуск! например -rwxr-xr-x)
#!/bin/bash mess="test cron" echo "$mess" |mutt -s "subj" -m application/octet-stream \n [email protected]
1.Создаем временный файл /home/user/test содержимое файла test такое:
SHELL=/bin/bash MAILTO=user 0-59 * * * * /home/user/mail
2. Запускаем в терминале команду crontab /home/user/test
Все. После этого в каталоге /var/spool/cron будет создан файл "user" примерно с таким содержимым:
# DO NOT EDIT THIS FILE - edit the master and reinstall. # (/home/user/test installed on Mon Mar 29 02:31:34 2004) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) SHELL=/bin/bash MAILTO=user 0-59 * * * * /home/user/mail
Файл /home/user/mail будет запускаться демоном cron каждую минуту.
Доступ в каталог /var/spool/cron непривилегированому пользователю закрыт, что бы посмотреть юзером "user" есть ли у него файл crontab, достаточно набрать команду crontab -l , если файл существует-будет показано его содержимое.
Для удаления файла используется команда crontab -r
Для редактирования используется команда crontab -e
Для управления файлами crontab пользователем "root" используется синтаксис:
crontab -u user_name file - создание файла crontab из файла "file" для юзера "user_name", -u означает чей crontab будет обработан, Если опция не задана, то будет обработан crontab того пользователя, который запустил команду crontab.
crontab -u user_name -l - просмотр файла crontab юзера "user_name"
crontab -u user_name -r - удаление файла crontab юзера "user_name"
crontab -u user_name -e - редактирование файла crontab юзера "user_name" используя редактор, заданный переменной окружения VISUAL или EDITOR
Формат и значения полей
Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей.
Общий формат команды. Желательно добавить в начало файла crontab -e этот текст. Тогда он будет всегда на виду и использоваться как шпаргалка:
# ------------------------------------------------ # минута час день_месяца месяц день_недели команда # ------------------------------------------------ # Допустимые значения: # минута от 0 до 59 # час от 0 до 23 # день_месяца от 1 до 31 # месяц от 1 до 12 (можно три буквы из названия месяца, # регистр не имеет значения от jan до dec) # день_недели от 0 до 6 (0 это воскресенье, # можно писать от sun до sat) # Каждое из полей даты и времени может быть обозначено символом * ,будет соответствовать любому возможному # значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом.
Например:
* 5 4-10 0-3 * echo "HELLO" # печать HELLO в 5:00 на 4,5,6,7,8,9,10 дни января, февраля, марта и апреля
пошаговая запись:
* */2 * * sat echo "HELLO" # печать HELLO каждый четный час, каждую субботу
равнозначная предыдущему примеру запись (списком):
* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO" # печать HELLO каждый четный час, каждую субботу
то же самое с указанием диапазона:
* 0-23/2 * * sat echo "HELLO" # печать HELLO каждый четный час, каждую субботу
59 23 31 dec * echo "Happy new year" # без комментариев :), поздравит с новым годом
Для отладки задания cron, можно перенаправить результат в файл
Пример:
0-59 * * * * /home/user/mail 2>/tmp/tmp.cron
Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron и вы всегда сможете узнать причину. В случае перенаправления вывода в файл, письмо, юзеру указаному в переменной MAILTO отправлено не будет.
Посмотреть информацию о всех командах запускаемых демоном cron можно в каталоге /var/log называются cron, cron1 и т.д.
В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день
Mar 29 04:03:00 rst CROND[4434]: (user) CMD (/home/user/mail) Mar 29 04:03:59 rst CROND[4493]: (user) CMD (/home/user/mail) Mar 29 04:05:00 rst CROND[4507]: (user) CMD (/home/user/mail) Mar 29 04:06:00 rst CROND[4549]: (user) CMD (/home/user/mail)
В остальных файлах cron1,cron2 находится подобная информация, но более старая чем в cron. Вот практически и все, что требуется знать для использования cron и crontab.
С Вами был Сергей Лазаренко. Если вам пригодилась данная инструкция, подписывайтесь на получение обновлений с сайта на свою почту. Поделитесь ссылкой на инструкцию нажав на иконку Вашей социальной сети снизу статьи.
А теперь немножко отдохнем в другом мире просмотрев красивый видео ролик о подводной охоте:
Add new comment