Translate

понеділок, 14 вересня 2009 р.

Планувальник Cron

Часто виникає необхідність автоматизувати виконання певних задач в заданий час, наприклад таких як оновлення системи чи запуск демонів та інше. Таким чином ми не повинні хвилюватися за їхнє вчасне виконання, за все подбає cron. Отже, переходимо до суті.
Головним конфігураційним файлом планувальника є /etc/crontab . Кожний рядок цього файлу повинен складатись з таких семи полів:

хвилина година число місяць день_тиждня користувач команда

Поля один від одного повинні відокремлюватись або пробілами, або символами табуляції. Наведу допустимі значення кожного з полів:

Поле................ Допустиме значення

хвилина ................* або 0-59
година ...................* або 0-23
число .....................* або 1-31
місяць ....................*, 1-12 або ім'я місяця
день_тиждня .......*, 0-7 або ж ім'я дня (неділя - це як 0 так і 7)
користувач ............користувач, від імені якого буде виконуватись команда
команда ..................власне команда, виконання якої ви бажаєте виконати в заданий час

Також дозволено вказувати декілька значень полів через кому і діапазонів через тире. Наприклад: "1,2,9" чи "0-4, 8-12". В випадку діапазону, вказані числа також входять в проміжок. Наприклад, значення поля "година" 9-12 призведе до виконання команди об 9, 10, 11 та 12 годинах.

При вказанні діапазону, можна пропускати деякі його значення, вказавши крок у формі /число . Наприклад: "0-59/5" для поля "хвилина" значить запуск команди через кожні п'ять хвилини на протязі всього діапазону хвилин. Крок також можна вказувати після зірочки : "кожні 5 хвилин" відповідає значенню "*/5"

Зірочка без вказання кроку відповідає всьому діапазону значень.

Для вказання полів "місяць" та "день_тиждня" дозволено використання імен місяця та дня тижня англійською мовою в якості трьох перших букв, регістр букв неважливий. В цьому випадку вказувати діапазони чи списки не можна.

Демон cron запускає вказані команди, коли значення полів "хвилина", "година", "місяць" і хоча б одне з полів "число" і "день_тиждня" співпадають з часом. Сron звіряє директиви з часом кожну хвилину.

Слід також зауважити, що день виконання команди може бути задане в двох полях - "число" та "день_тиждня". Якщо в кожному полі вказане значення (але не *), то команда буде запущена, коли одне з полів співпаде з часом. Продемонструємо це на прикладі:

30 4 1,15 * 5

запис призведе до виконання команди об 4:30 по півночі першого і п'ятнадцятого чисел, і до того ж всього, кожну п'ятницю.

Замість перших п'яти полів дозволено вказувати один із восьми спеціальних тригерів:

Рядок.................. Значення

@reboot ..............Виконати команду один раз, при запуску cron-а.
@yearly ..............Виконувати команду кожне 1 січня, "0 0 1 1".
@annually ...........---//---
@monthly ...........Виконувати команду кожен місяць, "0 0 1 * *".
@weekly .............Виконувати команду кожної неділі (день тиждня), "0 0 * * 0".
@daily .................Виконувати команду опівночі, "0 0 * * *".
@midnight ..........---//---
@hourly ..............Виконувати команду щогодини, "0 * * * *".

Для повного розуміння ситуації наведу приклад файлу /etc/crontab (демон працює в ОС Kubuntu 8.10):

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#запускати в п'ять хвилин після півночі, кожен день
5 0 * * * ipeacocks $HOME/ipeacocks/daily.job >> $HOME/zvit/blabla.txt

#запускати о 14:15 першого числа кожного місяця
15 14 1 * * ipeacocks $HOME/bin/monthly

#запускати о 22.00 кожний робочий день
0 22 * * 1-5 root poff kpitelecom >> /home/ipeacocks/blog.txt

5 4 * * sun echo "запуск в 4:05 кожну неділю"


Після зміни файлу /etc/crontab варто виконати команду:

crontab /etc/crontab