Пример
Рассмотрим пример создания файла 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 bob@server.ru
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 находятся в каталоге /var/spool/cron
Общий формат команды:
минута час день_месяца месяц день_недели команда
————————————————
Допустимые значения: минута от 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