Установка и настройка серверов Linux,создание сайтов, установка и настройка Asterisk PBX, Linux для начинающих и не только.
Получать статьи этого сайта на почту:

 

16
Jan 2012
sergldom
автор
0
комментариев
Рейтинг статьи:
4
Average: 3.7 (3 votes)

Настройка CRON, используем crontab в Linux

Используем crontab в Linux

      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 и файлы должны иметь права доступа на "выполнение" (про права доступа читай статью <![CDATA[]]>http://rst.void.ru/texts/chmod.txt<![CDATA[]]>) Поэтому перед размещением файлов в одном из этих каталогов необходимо убедиться, что сценарии не насесут вред системе.
      После того, как демон 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.

 

      С Вами был Сергей Лазаренко. Если вам пригодилась данная инструкция, подписывайтесь на получение обновлений с сайта на свою почту. Поделитесь ссылкой на инструкцию нажав на иконку Вашей социальной сети снизу статьи.

      А теперь немножко отдохнем в другом мире просмотрев красивый видео ролик о подводной охоте:

 

Рейтинг статьи: 

4
Average: 3.7 (3 votes)

Вам понравилась статья? Хотите получать уведомления о выходе новых статей с этого сайта на свой почтовый адрес? Подписывайтесь пожалуйста. Введите свой почтовый адрес и нажмите кнопку Хочу получать статьи!

<![CDATA[]]><![CDATA[]]>

 

*Адреса электронной почты не разглашаются и не предоставляются третьим лицам для коммерческого или некоммерческого использования.

 

 
 

 

Add new comment

Filtered HTML

  • Search Engines will index and follow ONLY links to allowed domains.

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Search Engines will index and follow ONLY links to allowed domains.

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.