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 следующий:
где;
•
•
•
•
•
Рассмотрим типичный пример данного файла (листинг 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
команды
Первая строка обязательна. После нее можно писать любые команды, которые нужно выполнить,