Материал просмотрен 1,687 раз(а)

После ознакомления статей по работе с процессами (работа с 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. Выполняться каждую ночь в 1:00, программа: ls 

    0    1    *    *    *    ls 

    То есть выполнять ls каждый раз, когда на часах 1 час и 0 минут.

     

  2. Выполнить программу ls по понедельникам: 

    0    1    *    *    1    ls

     

    То есть выполнять каждый раз, когда на часах 1 час и 0 минут и 1-ый день недели;

  3. Выполнять 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. Оу, надо бы системное время перевести на виртуальной машине ))