Cron для самых маленьких

Системный администратор как правило в перерывах между работой занимается автоматизацией процессов компании или домашнего сервера:)
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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.