Планировщик CRON


Cron - планировщик для linux. Выполняет задания по расписанию. Конфигурирование осуществляется через шелл.

Выполните команду:

crontab -e

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

поле1 поле2 поле3 поле4 поле5 команда
 
Значения первых пяти полей:

минуты — число от 0 до 59
часы — число от 0 до 23
день месяца — число от 1 до 31
номер месяца в году — число от 1 до 12
день недели — число от 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/test/script.sh

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

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

crontab -l

Пример.


Напишем простейший скрипт проверки интернет соединения и добавим его в CRON. Скрипт посылает по три пакета на три адреса (адреса DNS) и если все пакеты потеряны пишет в текстовый файл сообщение "eth_down", иначе - "eth_up". Действия, выполняемые скриптом можно изменить на свое усмотрение, что больному мозгу линуксоида взбредет.

touch ping.sh

nano ping.sh


#!/bin/bash
x=0
t=10
# t - пауза между пингами
ffunc() {
/bin/ping -c 3 $IP | /bin/grep '100% packet loss'
if [ $? = 1 ]
then x=0
else x=`expr $x + 1`
fi
}
IP=217.195.65.9
ffunc
/bin/sleep $t
IP=217.195.66.253
ffunc
/bin/sleep $t
IP=8.8.8.8
ffunc
/bin/sleep $t
if [ $x == 3 ]
then
echo "eth_down">/home/iptables/ping.txt
else
echo "eth_up">/home/iptables/ping.txt
fi

Пути должны быть полными, без использования переменных окружения.

Добавляем в CRON:

crontab -e

*/2 * * * * /home/test/ping.sh

Скрипт будет выполняться каждую вторую минуту.

Oct. 27, 2010