Cron незабывалка

cron

 

 

Как настраивать cron

Конфигурирование сценариев cron производится через unix shell. Прежде всего нужно определить какие программы вы хотите запускать и узнать полные пути к ним на диске сервера. Для этого перейдите с помощью команды cd в каталог где находится запускаемая программа и узнайте полный путь к этому каталогу с помощью команды pwd. Путь может выглядеть например как /home/u12345/scripts/script.pl. Убедитесь что файл, который вы хотите запускать, имеет права на чтение+исполнение (r+x) для владельца файла.

Поменять права на нужные можно командой:

chmod 750 script.pl

 

Далее выполните команду crontab -e. Вы окажетесь в текстовом редакторе vi, где сможете вводить текст сценария для cron. Краткая справка по редактору vi:

  • для вставки текста нажмите i, затем вводите текст
  • для удаления символов нажмите ESC, а затем наберите x
  • для выхода из vi без сохранения изменений нажмите ESC, а затем наберите :q!
  • для сохранения и выхода нажмите ESC, а затем наберите :wq

Задания для cron пишутся по одному в строке. После каждой строки, в том числе после последней или единственной, обязательно нужно нажать enter — иначе задания работать не будут.

Задание для cron выглядит как строка, в начале находятся пять обязательных полей для указания периодичности задания, а далее следует команда, которую нужно запускать:

поле1 поле2 поле3 поле4 поле5 команда

 

Значения первых пяти полей:

  1. минуты — число от 0 до 59
  2. часы — число от 0 до 23
  3. день месяца — число от 1 до 31
  4. номер месяца в году — число от 1 до 12
  5. день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Для каждого конкретного параметра можно задать несколько значений через запятую. Например, если в поле «часы» написать 1,4,22, то задание будет запущено в 1 час ночи, в 4 часа утра и в 22 часа. Можно задать интервал — 4-9 будет означать, что программу нужно запускать каждый час в период с 4 до 9 часов включительно. Символ ‘*‘ означает «все возможные значения». Например, указание ‘*‘ в поле «часы» будет означать «запускать каждый час». Символ ‘/‘ служит для указания дополнительной периодичности задания. Например, ‘*/3‘ в поле «часы» означает «каждые три часа».

Итак, как выглядит простейший сценарий cron:

0 */3 * * 2,5 /home/u12345/script.pl

 

Скрипт /home/u12345/script.pl будет автоматически запускаться каждые три часа во вторник и в пятницу. Введя такой сценарий в редакторе vi выйдите с сохранением результатов редактирования и, если вы не допустили ошибок, задание будет поставлено на выполнение с указанной периодичностью. Если при редактировании были допущены ошибки, cron сообщит вам о них.

Например:

/tmp/crontab.xxxxxxx: 1 строк, 9 символов
crontab: installing new crontab
"/tmp/crontab.xxxxxxx":1: bad minute
crontab: errors in crontab file, can't install
Do you want to retry the same edit?

 

Исправьте ошибки и попробуйте сохранить задание опять.

Посмотреть список уже установленных в cron сценариев можно командой crontab -l:

-bash-2.05b$ crontab -l
0 */3 * * 2,5 /home/u12345/script.pl

 

Рекомендация: если требуется запускать какую-то программу один раз в день, особенно если она требует для выполнения больших ресурсов, выполняйте такое задание ночью, в период с 2 до 8 часов — нагрузка на серверы в это время минимальна.

Примеры использования cron

Ниже приводятся примеры заданий для cron. Надеемся, эта информация поможет вам лучше понять работу этой программы.

# выполнять задание раз в час в 0 минут
0 */1 * * * /home/u12345/script.pl

# выполнять задание каждые три часа в 0 минут
0 */3 * * * /home/u12345/script.pl

# выполнять задание по понедельникам в 1 час 15 минут ночи
15 1 * * 1 /home/u12345/script.pl

# выполнять задание 5 апреля в 0 часов 1 минуту каждый год
1 0 5 4 * /home/u12345/script.pl

# выполнять задание в пятницу 13 числа в 13 часов 13 минут
13 13 13 * 5 /home/u12345/script.pl

# выполнять задание ежемесячно 1 числа в 6 часов 10 минут
10 6 1 * * /home/u12345/script.pl

 

Как запускать PHP-скрипты по расписанию

Вы можете выполнять запуск скриптов на языке PHP в указанное время с желаемой периодичностью. Для этого требуется использоватьPHP-CLI интерпретатор, пример использования которого описан здесь.

Поскольку не все PHP-программы могут работать через CLI SAPI без предварительной модификации, можно запускать их через wget. Например:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

 

Если в скрипте используются функции requireinclude, причём в них указаны относительные пути, то в начале выполняемого скрипта используйте вызов функции chdir(), которая задаст текущую рабочую директорию.

Как получать сообщения об ошибках от программ, запускаемых cron

Если при выполнении программы, которая запускается из cron, возникли ошибки, наверняка вы захотите получать сообщения об этих ошибках, чтобы полностью контролировать работу периодически запускаемых заданий. Для этого в начале cron-сценария поместите такую строку:

MAILTO=адрес@домен.ru

 

Конечно, адрес@домен.ru нужно заменить на реально существующий адрес электронной почты куда надо будет доставлять уведомления. Если нужно получать сообщения об ошибках на несколько адресов, укажите все эти адреса через запятую.

Обратите внимание на то, что cron будет присылать по почте то, что выводят запускаемые скрипты. Например, если вы напишете скрипт, который будет печатать строчку «Hello, world» и поставите его на выполнение через cron, вы будете получать по почте письмо со строкой «Hello, world» каждый раз, когда cron будет запускать такой скрипт.

Чтобы избежать этого, например когда текст, выводимый скриптом, вам не нужен, надо добавить в конец строки-сценария для cron символы

> /dev/null 2>&1

 

Полностью строка для cron будет выглядеть так:

  • Для PHP4:

    0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1
  • Для PHP5:

    0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Рекомендуем проверять корректность синтаксиса скриптов, которые вы устанавливаете на выполнение через cron. Скрипты могут содержать ошибку, могут неодинаково работать при запуске через веб-сервер и через cron и так далее. Для того, чтобы убедиться что скрипт будет правильно работать через cron, предварительно проверьте его такой командой в unix shell:

  • Для PHP4:

    /usr/local/bin/php -l script.php
  • Для PHP5:

    /usr/local/bin/php -l script.php

Если ошибок в скрипте нет, вы увидите сообщение «No syntax errors detected in script.php».

Ограничения

Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов и так далее.

Кроме того, существует ограничение на периодичность запуска программ из cron. Пользователь может запускать свои программы таким образом не чаще чем 1 раз в 1 час.

Спасибо : http://masterhost.ru/support/doc/cron/

 

cron

Планировщик задач в Linux играет незаменимую роль в автоматизации администрирования операционной системы. Роль планировщика задач выполняет демон cron (crond — в некоторых дистрибутивах). Демон cronобычно запускается процессом init в момент запуска системы. После запуска, демон cron ежеминутно просматривает свои таблицы, в которых содержатся информация о периодичности запуска команд и запускает команды, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем. Основной конфигурационный файл демона cron — /etc/crontab:

cron:~#cat /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/crontab задания выполняются с помощью команды run-parts, которая запускает скрипты и программы из указанных каталогов (/etc/cron.hourly, /etc/cron.daily и т.д.). Каждая строка запускает из соответствующего каталога задания ежечасно, ежедневно, еженедельно и ежемесячно, соответственно строкам сверху вниз. Обратите внимание, что все команды здесь запущены от имени пользователя root. Заметьте также, что crontab может содержать присваивания значений переменным shell, которые будут установлены перед запуском команды.

Так же, если необходимо запускать какие-то команды по особому расписанию (не ежечасно, ежедневно, еженедельно и ежемесячно), то таблицы заданий помещаются в каталог /etc/cron.d/.

Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноименная программа crontab, позволяющая не прерывать процесс cron на время редактирования. Редактировать вручную таблицы cron не рекомендуется. Файлы таблиц планировщика cron для пользователей могут храниться в следующих каталогах:

/var/spool/cron — RedHat
/var/spool/cron/crontabs — debian,ubuntu
/var/spool/cron/tabs — SUSE

Каждая строка планировщика имеет следующий формат:

* * * * * {пользователь} выполняемая_команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12) (можно три буквы из названия месяца,
| | |                        регистр не имеет значения от jan до dec)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

В примере показан формат одной из строки таблицы, состоящий из 7 полей. Первые 5 полей  — это значения, задающие периодичность выполнения команды (расписание). 6-e поле присутствует только в таблицах /etc/crontab и др. расположенных в каталоге /etc/cron.d/. 7-е поле есть сама запускаемая команда. Командой может быть как простая команда, например, ls /proc >> /tmp/proc, или команда запуска написанного вами специального сценария. Со всей оставшаяся частью строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab. Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Для указанных выше первых 5 полей, можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, указанное другими параметрами.

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.

Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.

Косая черта (/) используется для определения шага значений. Если после диапазона указать /<целое_число>. Например, значение минут 0-59/2, определяет, что задание будет запущено каждую вторую минуту.

Вся оставшаяся часть строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Пример crontab-файла:

# выполнить команды hello каждый понедельник  в 3:30
30 3 * * mon hello
# выполнить команду hello в первый день каждого месяца в 4:10
10 4 1 * * hello
# выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily
5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1
# каждый рабочий день в 22:00
0 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john
23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."
5 4 * * sun echo "Выполняется в 4:05 в воскресенье"
0 0 1 1 * echo "С новым годом!"
15 10,13 * * 1,4 echo "Эта надпись выводится в понедельник и четверг в 10:15 и 13:15"
0-59 * * * * echo "Выполняется ежеминутно"
# каждые 5 минут
*/5 * * * * echo "Прошло пять минут"

anacron

anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:

* * * выполняемая_команда
- - -
| | |
| | --------- идентификатор
| ----------- задержка
------------- период

Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания— любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.

На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:

В Linux есть такой чудо демон — cronДемон cron при загрузке, а так же — после загрузки каждую минуту«шерстит» файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в «просматриваемом» файле и запускает указанную команду, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.

Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.

спасибо: wiki + http://www.k-max.name/linux/planirovshhik-linux-cron-crontab-anacron/

Перечень, все машины топ гир на сайте
  1. Пока комментариев нет.

  1. Пока что обратных ссылок нет.