Системный администратор как правило в перерывах между работой занимается автоматизацией процессов компании или домашнего сервера:)
Cron удобный инструмент для запуска различных скриптов или программ в нужное нам время или с определенной периодичностью.
Демон Cron присутствует практически во всех UNIX подобных системах «из коробки».
Минимальное время которым Cron может оперировать равно одной минуте.
Для редактирования списка задач используется утилита crontab.
Список ключей запуска crontab:
-l — вывести текущий список заданий данного пользователя
-e — открыть список заданий на редактирование
-r — удалить все задания
-u — указать пользователя от которого будет исполнятся данные задания (например www (или www-data для Linux) доступно только из-под root)
По умолчанию список заданий совсем пустой, его необходимо дополнить двумя переменными, не указав PATH вы можете столкнутся с тем, что запущенный в ручную скрипт будет корректно отрабатывать, а в cron он не будет работать, т.к. в своей среде он не будет знать откуда запускать файлы (если в вашем скрипте не был прописан полный путь до файлов), поэтому в шапку добавим следующее:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin #minute hour mday month wday path
Где:
SELL — собственно шелл
PATH — каталоги исполняемых фалов
#minute hour mday month wday path — шпаргалка
Из шпаргалки надеюсь понятно, что любая запись состоит из
минуты часы день месяца месяц дни недели и путь до скрипта
Значения можно отбивать пробелом или табулятором, я использую табулятор
* — любое значение
*/2 — шаг каждые 2 (минуты, часа например)
1-12 — диапазон выполнения (каждую минуту в диапазоне от 1 до 12 минут часа или с 1 часа до 12 часов если данное значение указано в часе)
sun mon tue wed thu fri sat — дни недели, регистр символов не важен , которые можно указать в цифровом варианте (FreeBSD 1-7, где 7 воскресенье, в Linux 0-6, 0 — воскресенье)
jan feb mar apr may jun jul aug sep oct nov dec — месяцы, так же можно использовать числовое значение 1-12
Так же у Cron есть встроенные переменные:
@reboot — запустить при загрузке
@yearly — запуск раз в год (первый день года)
@monthly — запуск раз в месяц (первое число месяца)
@weekly — запуск раз в неделю
@daily — запуск раз в день
@midnight — запуск в полночь (наверное для вампиров:))
@hourly — запуск раз в час
Примеры из жизни:
*/20 * * * * /usr/local/www/lightsquid/lightparser.pl today
Парсинг лога SQUID парсером lightsquid каждые 20 минут
1 0 1 * * /home/admins/scripts/squidrotate.sh
Обработка лога SQUID первая минута нового месяца (можно было записать как @monthly)
*/5 15-21 * * 1-4,7 /home/admins/scripts/cloud.sh
Запуск скрипта каждые 5 минут в диапазоне 15-21 часа с понедельника по четверг и воскресенье
* * * * * /blah-blah.sh
Будет дергать скрипт каждую минуту
После редактирования сохраняем наш crontab, как принято в вашем редакторе, я использую редактор vi, поэтому -> Esc->:wq
И читаем вывод, при наличии ошибок crontab не даст сохранить файл
crontab: installing new crontab "/tmp/crontab.z6yIYvNqgV":30: bad minute crontab: errors in crontab file, can't install
Введите y и продолжите редактирование
если все хорошо, то вы увидите вывод подобный моему:
/tmp/crontab.z6yIYvNqgV: 31 строк, 1031 символов. crontab: installing new crontab
Работу Cron можно понаблюдав за его логом:
tail -f /var/log/cron