08.09.2008 [09:09]

Тут решил перевести один мануальчик для себя. Потом выложил на внутрисетевом сайте. Думах про хабр, но хабр сосет. Хочу поделиться в блоге.

Crond и atd - два очень легких и важных сервиса, с которыми каджый должен хоть как-то познакомиться. Cron выполняет определенные вами команды с заданной вами периодичностью (ежедневно, еженедельно), в то время как задача atd - запустить определенную команду в опредленное время один раз.


Эти два сервиса таковы, что мы не собираемся подробно разбираться с их пакетами, установкой и ссылками. Они есть везде. Поговорим лишь о настройке самих файлов.

В файле /etc/crontab содержится перечень заданий, которые нужно выполнить. Таких как - обновление локали, работа с БД, ротации логов, и, возможно, выполняют задачи резервного копирования. Если это все необходимо делать периодически, вы можете записать их в файле /etc/crontab. Этот файл читается при загрузке cron'а, который уже запущен на большинстве UNIX-систем.


После изменения /etc/crontab вы обязаны перезапустить cron командой: /etc/init.d/cron restart


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

<time> <user> <executable>


<time> это временная схема, по которой должна выполняться команда. <user> говорит под каким юзером команда должна быть запущена. <executable> - собственно, сама команда.


Временная схема такова: минута, час, день месяца, месяц, день (или дни) недели. Проверка совпадений проверяется каждую минуту (поэтому нельзя задать секунды выполнения, но это можно сделать с помощью bash). Если проверка пройдет успешно, cron запустит нужную команду. Вот пример простой команды:


50 13 2 9 6 root /usr/bin/play /etc/theetone.wav

Данная строка будет проигрывать данный WAV-файл каждое воскресенье в Сентябре 2-го числа в 13:50:00 каждый год. Немного сложно, разберемся. Читаем временной ряд с конца: 6 - воскресенье, 9 - Сентябрь, 2 - число, 13 - час, 50 - минуты.



50 13 2 * * root /usr/bin/play /etc/theetone.wav

Играет WAV-ку в 13:50 каждое второе число месяца.


50 13 * * 6 root /usr/bin/play /etc/theetone.wav

Делает то же каждое воскресенье в 13:50


50 13,14 * * 5,6,7 root /usr/bin/play /etc/theetone.wav

То же в 13:50 и 14:50, каждую пятницу, субботу, воскресенье.


*/10 * * * 6 root /usr/bin/play /etc/theetone.wav

Каждые 10 минут в пятницу. Обратный слеш говорит, что это не часы запуска, а шаги в минутах


Все вышеприведенный команды запускают музыку под root'ом. (Что делать необязательно)


Пример простого crontab - файла:

# Time specs

30 20 * * * root /etc/cron-alarm.sh

35 19 * * * root /etc/cron-alarm.sh

58 18 * * * root /etc/cron-alarm.sh

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


Note: Символ # - обозначает комментарий.


Есть еще одна полезная вещь: если у вас есть скрипт, который по вашей задумке должен запускать какждый день, его даже не нужно прописывать в /etc/crontab. Можно создать файл /etc/cron.<интервал>. Например /etc/cron.daily


Команда at


at выполняет определенный команды только один раз в будущем. Однако я никогда не использовал его, так как такая необходимость возникает редко.


[root@cericon /etc]# at 14:19

at> /usr/bin/play /etc/theetone.wav

at>

warning: commands will be executed using /bin/sh

job 3 at 2000-09-02 14:19


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


Man-страницы atd и at дадут вам больше информации, если вам это действительно пригодится.

3.themylogin — 08.09.2008 [03:44] []
Ой как хорошо, что ты напомнил про AT, а то я каждый раз считаю через сколько мне секунд вставать и пишу "sleep 26000; mplayer ..."
1.V@s3K — 08.09.2008 [08:32] []
я в крон забил себе все расписание на неделю xD
по тому же принципу
refresh

(не заполняйте это поле)

i