Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details. (5)


Использование CRON и команды crontab

Поиск:
Названия каталогов и файлов описаны для Linux(RedHat). Для других операционных систем, названия могут отличаться, но принцип работы cron точно такой же.

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 будет запускаться каждое воскресенье на 22'ой минуте 4'го часа.
    содержимое каталога /etc/cron.monthly будет запускаться каждый первый день месяца на 42'ой минуте 4'го часа.
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 определяет изменения по времени модификации файлов или каталогов, такое его свойство избавляет от необходимости перезапуска демона.

Как отмечалось выше, размещение файлов для 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 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

добавлено bilbobagginz


Дополнительная информация администратору отлаживающему таблички-крона:
  • 1. Нередко в системах нужно ограничивать доступ пользователей в системе, запрещая использование служб cron, at и т.п.
    При этом всё-же нужно периодически запускать задачи под пользователем vasya.
    Для этого используется общесистемныj файл /etc/crontab.
    В данном файле указывается строка стандартной крон-таблицы, какую мы бы создали в таблице пользователя vasya, но добавляется имя пользователя 6-ым полем слева:
    Код

    42 4 1 * * vasya /home/vasya/scripts/scrpt.sh > /dev/null

    т.е. вышеизложенный сценарий /home/vasya/scripts/scrpt.sh
    будет запущен системой crond раз в месяц,
    1-го числа, в 4:42, под пользователем vasya.

  • 2. при разработке программ, запускаемых через cron, очень важно знать:
    •  Начальный каталог запуска программы
    •  Значение переменных PATH, USER, и др.
    •  Местонахождение данных для программы
    •  и .т.д

Вот практически и все, что требуется знать для использования cron и crontab.
Автор: dinggo, bilbobagginz






Просмотров: 5811

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную