Настройка cron

Cron Debian Linux Unix

Предположим нам нужно запускать определенную задачу каждый день, или, может, каждую субботу в 12 ночи? В Unix-подобных системах существует возможность автоматизировать запуск повторяющихся задач при помощи демона планировщика задач cron. В данной статье будут рассмотрены основы работы с ним.

Все описанное в данной статье тестируется в ОС Linux Debian 6.0 squeeze, однако в большинстве случаев будет работать на других Unix-подобных операционных системах.

Основные команды

Для управления планировщиком задач используется команда crontab со следующими ключами:

-u пользователь - определяет пользователя чьи задачи будут просматриваться/редактироваться, отсутствие данного параметра устанавливает текущего пользователя;
-l - показывает список текущих задач;
-e - запускает редактор планировщика задач;
-r - удаляет все текущие задачи.

Таким образом для назначения определенной задачи нужно выполнить команду crontab -e и построчно написать список необходимых задач на основе синтаксиса cron.

Синтаксис cron

В общем виде задача крон представляет собой строку вида:

* * * * * команда

Каждой звездочке в строке соответствует определенное значение:

*****команда
Минута (0-59)Час (0-23)День (1-31)Месяц (1-12)День недели (0-7)Строка выполняемой команды

0 и 7 в дне недели обозначает воскресенье, поскольку в некоторых странах день недели начинается с воскресенья. Соответственно 1 - понедельник, 6 - суббота. В файле crontab помимо перечисленных выше допустимы следующие основные символы:

# - комментарий (строки начинающиеся с данного символа не выполняются);
, - перечисление значений (1,2,3,4);
/ - каждые n раз (*/n - каждые n, */5 - каждые 5, */2 - каждые 2);
- - интервал значений (1-5 - с 1 до 5, 4-6 - с 4 до 6).

Из вышеперечисленного следует, что следующие записи соответствуют следующим строкам:

0 5 * * * - каждый день в 5:00;
*/10 * * * * - каждые 10 минут;
0 0 1 1 * - 1 января каждого года;
0 9 * * 1,3,5 - понедельник, среду и пятницу в 9 утра;
0 0 1 * * - каждое 1-е число месяца.

Так же в файле crontab можно записывать следующие предопределенные значения:

@reboot - при загрузке операционной системы;
@yearly - каждый год в полночь 1-го января;
@monthly - каждый месяц в полночь 1-го числа;
@weekly - в полночь каждый понедельник;
@daily - ежедневно в 0:00;
@hourly - в начале каждого часа.

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

Лучше всего понять синтаксис файла crontab можно на следующем примере: crontab -e -u user

#Привет, я файл crontab пользователя user, и вот чему научил меня мой хозяин
#Я здороваюсь с ним после своей загрузки
@reboot echo 'Привет, Хозяин!'

#Каждый рабочий день в 6:45 я запускаю для него скрипт,
#который включает будильник
45 6 * * 1-5 /home/user/beep.sh

#Пока хозяин добирается до работы или высыпается в выходной день,
#я присылаю для него свежие новости (каждый день в 8 утра)
0 8 * * * /home/user/newsmail.sh

#Я зову хозяина домой в конце рабочего дня
0 18 * * 1-5 echo "Приезжай домой, Хозяин" | mail -s "Конец рабочего дня" user

#И я поздравляю его
@yearly echo 'С Новым годом'
10 Окт 2012 11:41 -- Юрий Акимов