Настройка и работа в Linux
adb5321d

"Сделал работу и ухожу"


Как уже было отмечено, если некоторое задание не было выполнено демоном crond в указанное время (например, компьютер был выключен), то процесс crond не выполняет такую команду позже, поскольку информация о невыполнении задания ему не поступает. А для некоторых системных заданий такое явление недопустимо.

Эту проблему позволяет решить другой системный демон, имя которого anacron. В отличие от cron, он работает по следующему принципу. При запуске (а запускается он во время старта системы из инициализационных скриптов) он просматривает свой конфигурационный файл (обычно /etc/anacrontab), в котором для каждого задания указывается периодичность (в сутках), с которой должно повторяться выполнение этого задания. Далее anacron проверяет, выполнялось ли данное задание в течение последних n дней. Если нет, anacron запускает на выполнение команду, указанную в строке задания. При этом выполнение команды может осуществляться с некоторой задержкой, величина которой (в минутах) должна быть указана в строке задания. После выполнения задания anacron записывает дату выполнения в специальный файл, содержащий записи о времени последнего выполнения данного задания, чтобы знать, когда надо выполнять это задание снова. Эти файлы сохраняются в каталоге /var/spool/anacron. В файл записывается только дата, часы и минуты не запоминаются.

После выполнения каждого задания anacron посылает сообщение о его выполнении системному демону протоколирования syslogd, а после выполнения всех заданий из конфигурационного файла заканчивает работу.

Конфигурационный файл /etc/anacrontab может содержать строки трех типов: строки описания заданий, строки задания переменных окружения и строки комментариев. Строка описания заданий имеет следующий формат:

период задержка идентификатор_задания команда

Как уже говорилось, период задается в днях, а задержка - в минутах. Идентификатор задания может содержать любые символы, кроме пробелов и слэшей. Он используется для идентификации задания при формировании сообщений демону протоколирования и при запоминании времени выполнения задания. В качестве команды может использоваться любая команда оболочки.

Строки задания переменных имеют стандартный формат:


ИМЯ_ПЕРЕМЕННОЙ = ЗНАЧЕНИЕ

В качестве строк комментария может выступать пустая строка, строка состоящая только из пробелов или строка, содержащая произвольную последовательность символов, начинающуюся символом '#' (перед которым может стоять любое количество пробелов).

Приведу в качестве примера файл /etc/anacrontab из стандартной установки дистрибутива Red Hat Linux:

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system. 1 5 cron.daily run-parts /etc/cron.daily 7 10 cron.weekly run-parts /etc/cron.weekly 30 15 cron.monthly run-parts /etc/cron.monthly

Как видите, в Red Hat утилита anacron "подстраховывает" демон cron, запуская периодические задания cron-а, если последний почему-либо их не запускал. Благодаря этому, в частности, скрипт logrotate регулярно (точнее, при каждом запуске компьютера) выполняется, несмотря на то, что демоном crond он не запускается из-за выключения компьютера на ночь. Среди регулярно запускаемых cron-ом скриптов (в каталогах /etc/cron.daily, /etc/cron.weekly и /etc/cron.monthly) вы найдете скрипт 0anacron, который заботится о том, чтобы обновить записи о времени последнего выполнения тех заданий, которые поручены обеим демонам (чтобы исключить их повторное выполнение anacron-ом).

При желании можно, очевидно, сделать так, чтобы cron, в свою очередь, "подстраховывал" anacron, периодически запуская его (хотя проще просто поручить периодические задания cron-у).

Демон anacron запускается при старте системы и, выполнив предписанные ему задания, завершает работу. Наверное поэтому нет никаких утилит, специально предназначенных для ввода новых заданий демону anacron. Такие задания может давать только суперпользователь путем прямого редактирования файла /etc/anacrontab. По-видимому, основное назначение этого демона - выполнять какие-то работы по обслуживанию системы после периодов долгого простоя.


Содержание раздела