Периодическое (регулярное) выполнение задач

Скрипты можно использовать для автоматизации тех или иных задач. Очень часто при этом требуется организовать выполнение скрипта в заданное время или через определённые интервалы времени. Для этого существует специальный демон — crond.

Для настройки программ на регулярное выполнение используется файл конфигурации, который можно посмотреть командной crontab -l и изменить командой crontab -e.

Рассмотрим такой файл:

$ crontab -l

# DO NOT EDIT THIS FILE - edit the master and reinstall.

# (/tmp/.private/student/crontab.6WaeT9 installed on Mon Mar 17 12:39:10 2008)

# (Cron version V5.0 -- vixie-cron-4.1.20060426-alt3)

#minute (0-59),

#| hour (0-23),

#| | day of the month (1-31),

#| | | month of the year (1-12),

#| | | | day of the week (0-6 with 0=Sunday).

#| | | | | commands

*/1 * * * * /var/www/bin/log-local.sh

*/2 * * * * /var/www/bin/log-snmp.sh

Строки, начинающиеся с # — как обычно, комментарии. Для каждой из запускаемых команд указывается, когда её надо выполнить. Для этого используются пять полей — минуты, часы, дни месяца, месяцы и дни недели. Для каждого из полей можно указать или какое-либо определённое значение, или *, что означает «для всех».

Рассмотрим значения этих полей на примера вызова программы /bin/false:

* * * * * /bin/false Запускать каждую минуту (каждого часа, каждого дня, каждого месяца, в любой день недели)
*/3 * * * * /bin/false Запускать каждые три минуты (каждого часа, каждого дня, каждого месяца, в любой день недели)
*/3 1-2 * * * /bin/false Запускать каждые три минуты первого и второго часа ночи (каждого дня, каждого месяца, в любой день недели)
1 1,6 * * * /bin/false Запускать в первую минуту первого и шестого часа ночи, т.е. в 01:01 и 06:01 (каждого дня, каждого месяца, в любой день недели)
1 1 * * 1 /bin/false Запускать в 01:01 каждый понедельник
1 1 * 2 1 /bin/false Запускать в 01:01 каждый понедельник февраля
* * 13 * 5 /bin/false Запускать каждую минуту каждого часа 13 числа каждого месяца, приходящегося на пятницу

При выполнении по cron'у задач, которые потенциально могут выполняться длительное время, следует предусмотреть и блокировать повторный запуск cron'ом скрипта в то время, когда ещё не успел завершиться предыдущий. Обычно такое можно делать, создавая и анализируя при запуске скрипта файл блокировки. Например:

$ cat lock.sh

#!/bin/bash

LOCK=/tmp/file.lock

if [ -f "$LOCK" ]; then

echo 'Скрипт уже работает'

exit 1

fi

touch "$LOCK"

sleep 1m

rm -f "$LOCK"

Здесь при запуске скрипта проверяется существование файла, и если он существует, то выполнение скрипта завершается. Иначе файл создаётся, выполняется некое действие (в данном случае — просто ожидание на 1 минуту), и перед завершением работы файл блокировки удаляется.

Пример выполнения:

$./lock.sh &

[2] 7704

$ Скрипт уже работает

[2]+ Exit 1./lock.sh


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: