Fedora 8 Руководство пользователя - Страница 51
7.6. Планировщики заданий
7.6.1. Выбор планировщика
В состав Fedora входит три планировщика: crond, anacron и atd. Планировщик crond используется для создания расписания, т.е. для периодического выполнения указанных пользователем команд в определенное время. Например, вы можете задать команду, которая будет выполняться каждый час, каждый день или раз в месяц.
Планировщик atd немного проще. Он умеет выполнять программы в строго определенное время, т.е. вы можете задать время и дату, например, 7 часов 11 октября, и команду, которая будет выполнена и это время.
Понятно, что планировщик crond более универсальный, поэтому в большинстве случаев вы будете использовать именно его. A планировщик atd можно вообще отключить.
Планировщик anacron является ближайшим родственником crond. Он похож на crond, но в то же время заслуживает отдельного разговора.
7.6.2. Планировщик crond
7.6.2.1. Файл конфигурации /etc/crontab
Основной конфигурационный файл данного планировщика называется /etс/crontab. Этот файл является общесистемным расписанием и его может редактировать только пользователь root. Формат файла crontab следующий:
М Ч Д ММ ДН Команда
где;
• М - минута (0-59);
• Ч - час (0-23);
• Д - день (1-31);
• ММ - месяц (1-12);
• ДН - день недели (0=Вс, 1=Пн и т.д.).
Рассмотрим типичный пример данного файла (листинг 7.3).
Листинг 7.3. Типичный пример файла crontab
SHELL= /bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
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
Здесь SHELL, PATH, MAILTO и HOME - это переменные окружения, задающие, соответственно, оболочку, путь поиска программ, адрес администратора и домашний каталог - они нужны только в общесистемном файле. Нас больше интересует вторая часть этого файла:
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
Команда run-parts означает, что должны быть выполнены все выполняемые файлы (обычно это сценарии) из указанного каталога. Не сложно догадаться, что из каталога /etc/cron.hourly команды будут выполняться каждый час, из каталога /etc/cron.daily - каждый день (в 4 часа утра), из каталога /etc/cron.weekly - раз в неделю по воскресеньям, а из каталога /eta/сron.monthly - раз в месяц, 1-го числа.
7.6.2.2. Правильное расписание для домашнего компьютера
Взгляните на формат файла crontab, а затем на имеющееся расписание. Программа crond довольно "древняя". Первоначально она появилась в UNIX, а UNIX преимущественно устанавливалась на серверах, которые работают круглосуточно и никогда не выключаются. Потом программа crond ''перекочевала" в Linux. Система Linux тоже сначала использовалась на машинах, которые практически никогда не выключаются - на компьютерах профессиональных пользователей-фанатов и на серверах. Со временем система Linux плавно переехала на домашние компьютеры, но в 4 часа утра компьютеры домашних пользователей… выключены. Следовательно, заданные команды не будут выполнены никогда!
Поэтому нам, как домашнему пользователю, нужно изменить расписание хотя бы так, как показано ниже (думаю, к 9 часам можно включить компьютер практически в любой день, включая воскресенье),
02 9 * * * root run-parts /etc/cron.daily
22 9 * * 0 root run-parts /etс/cron.weekly
42 9 1 * * root run-parts /etc/cron.monthly
Если вы работаете за домашним компьютером преимущественно вечером, то время выполнения следует "переместить" на вечер:
02 20 * * * root run-parts /etc/cron.daily
22 20 * * 0 root run-parts /etc/cron.weekly
42 20 1 * * root run-parts /etc/cron.monthly
Кроме того, может потребоваться изменить день недели для команд, которые выполняются еженедельно (в приведенных примерах задан день недели 0 = Bс, а в воскресенье компьютер может быть выключен):
22 20 * * 1 root run-parts /etc/cron.weekly
В результате команды из каталога /etc/cron.weekly будут запускаться каждый понедельник в 20 часов 22 минуты.
7.6.2.3. Сценарии
Как уже было отмечено выше, в каталоги /etc/cron* помещаются сценарии, которые нужно выполнить в указанное время. Рассмотрим шаблон типичного сценария (листинг 7.4).
Листинг 7.4. Шаблон сценария
#!/bin/bash
команды
Первая строка обязательна. После нее можно писать любые команды, которые нужно выполнить, например freshclam (используется для обновления антивирусных баз).
После того как сценарий создан, нужно сделать его выполняемым (без этого система не сможет его запустить);
# chmod + имя_файла_сценария
7.6.2.4 Пользовательские файлы crontab
Каждый пользователь может создать свой файл crontab. Для этого используется команда crontab. Пользовательские файлы crontab помещаются в каталог /var/spool, чтобы исключить их непосредственное редактирование в текстовом редакторе.
Пользовательские файлы crontab никак не влияют на общесистемный файл /etc/crontab, который редактируется только пользователем root.
7.6.3. Планировщик anacron: отдельный разговор
Как уже было отмечено, anacron - это ближайший родственник crond. Он создан для того, чтобы устранить некоторые недостатки crond. Предположим, вы хотите, чтобы антивирусная база обновлялась в понедельник, в 18.00. Но если в один прекрасный день вы еще не придете с работы в указанное время, компьютер останется выключенным и, следовательно, обновления не произойдет. В результате вы останетесь со старой базой (если, конечно, не запустите обновление вручную).
Планировщик Anacron контролирует выключения и перезагрузки компьютера, поэтому ваши задания не останутся невыполненными. Тем не менее, и у anacrontab есть недостатки,
• Пользователи не могут создавать свои расписания, системный файл /etc/anacrontab может редактировать только пользователь root.
• Планировщик crond более гибкий в настройке: вы можете указать часы и минуты, когда должна быть выполнена команда. В случае планировщика anacron можно указать только период, когда будет выполнена указанная команда, и допустимую задержку.
Формат файла /etc/anacrontab следующий: Период Задержка ID-задачи Команда
Пример файла anacrontab представлен в листинге 7.5.
Листинг 7.5. Пример файла /etc/anacrontab
# /etc/anacrontab: файл настройки для anacron
# См. anacron(8) и anacrontab(5) для более подробной инфoрмации
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# These replace cron's entries
1 5 cron.daily run-parts /etc/cron.daily
7 10 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly