После ознакомления статей по работе с процессами (работа с top, утилита ps, уничтожение процессов, приоритет процессов), следует изучить и средства планирования задач.
Я считаю, что для администратора знать это – очень важно. Многие процессы можно автоматизировать, если есть базовые знания работы в FreeBSD и программирования на языке оболочки.
Зачем планировать задачи?
- Проверять защиту;
- Обновлять состояние системы;
- Обновлять базы данных;
- Делать резервное копирование;
- Очищать журнальные файлы и т.д.
Преимущество FreeBSD в том, что планировщик представляет собой отдельный демон, который может выполнять любую задачу, которую администратор сможет выразить алгоритмически.
Планировщик CRON
В FreeBSD, как и в большинстве систем типа UNIX, планировщик имеет имя cron. Как автономный демон, она работает постоянно и ежеминутно проверяет свои входные файлы (crontab), чтобы узнать, были ли они модифицированны или содержат задачу, которую нужно выполнить в данную минуту.
Сам процесс cron не нужно перезапускать, он автоматически прочитает любые изменения во время своего ежеминутного пробуждения.
Файлы CRONTAB
Глобальный файл crontab (/etc/crontab) содержит запланированные задания, выполняемые системой, а специальный каталог (/var/cron/tabs) позволяет отдельным пользователям создавать свои собственные файлы очереди crontab.
По возможности, лучше не редактировать файл /etc/crontab, а создавать индивидуальные файлы очереди. Каждый файл crontab помещается в определённый каталог /var/cron/tabs и принадлежит своему создателю с полномочиями 0600, механизм безопасности разрешит пользователю создавать и редактировать только собственные файлы, не компрометируя файлы других пользователей. Этим механизмом является утилита crontab:
# crontab -e
crontab работает посредством вызова редактора, указанного в переменной окружения VISUAL (или в переменной EDITOR, если VISUAL не задана). В редакторе появляется содержимое файла (за исключением первых трёх строк комментария).
После того, как мы заполнили файл в соответствии с нашими условиями, сохраняем и закрываем его. Временный файл, который во время внесения изменений находился в каталоге /tmp, скопируется в каталог /var/cron/tabs, и в него добавятся строки заголовка. Файл будет активизирован при следующем обращении cron, т.е. максимум – через минуту.
Файл crontab в общем виде состоит из шести полей:
“минуты” “часы” “число месяца” “месяц” “день недели” “команда”
Диапазон значений даты и времени в файлах crontab:
Поле
|
Допустимые значения
|
минуты
|
0-59
|
часы
|
0-23
|
число месяца
|
1-31
|
месяц
|
1-12
|
день недели
|
0-7 (воскресенье – это 0)
|
Примеры задач:
- Выполняться каждую ночь в 1:00, программа: ls
0 1 * * * ls
То есть выполнять ls каждый раз, когда на часах 1 час и 0 минут.
- Выполнить программу ls по понедельникам:
0 1 * * 1 ls
То есть выполнять каждый раз, когда на часах 1 час и 0 минут и 1-ый день недели;
- Выполнять ls каждый час, в течении апреля:
0 * * 4 * ls
То есть выполнять каждый раз, когда на часах 0 минут и дата – 4-ый месяц.
Как вы уже поняли из синтаксиса, символ * – означает любое значение из интервала. В полях месяца и дня недели могут быть использованы и символические имена (трёхбуквенные сокращения, например jan, mon – январь, понедельник). Кроме этого, значения могут быть перечисленны через запятую, но без указания диапазона.
Если нужно выполнять программу каждые N интервалов, то можно определить шаговое значение */N. Например, если нужно выполнять программу каждые 10 минут, то:
0,10,20,30,40,50 * * * * ls
эквивалентно
*/10 * * * * ls
Существуют также строки сокращения:
Строка
|
Эквивалент
|
@reboot
|
Выполняется один раз во время запуска системы |
@yearly
|
0 0 1 1 * |
@annually
|
аналогично @yearly |
@monthly
|
0 0 1 * * |
@weekly
|
0 0 * * 0 |
@daily
|
0 0 * * * |
@midnight
|
аналогично @daily |
@hourly
|
0 * * * * |
Пример:
Напишем простенький скрипт для командной оболочки:
#! /bin/sh
date >> log.txt
Этот скрипт дописывает в конец файла log.txt текущую дату и время.
Теперь выполним команду:
# crontab -e
которая откроет редактор временного файла crontab.
Скрипт будем выполнять каждую минуту, пропишем путь до нашего скрипта.
А теперь командой cat log.txt будем периодически прочитывать файл, и увидим, что скрипт выполняется каждую минуту:
P.S. Оу, надо бы системное время перевести на виртуальной машине ))
Comments: