Тут решил перевести один мануальчик для себя. Потом выложил на внутрисетевом сайте. Думах про хабр, но хабр сосет. Хочу поделиться в блоге.
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 дадут вам больше информации, если вам это действительно пригодится.