Совсем недавно, в статье «Как заставить cron выполнять наши приказания» мы рассмотрели использование демона cron. В сегодняшней статье мы сосредоточим внимание на реальных сценариях обслуживания системы, которые cron запускает ежедневно, еженедельно и ежемесячно.
Вообще говоря, всегда разумно знать какие сценарии запускаются на вашем компьютере, поскольку любой сценарий это палка о двух концах. Их положительная сторона в том, что они могут держать вас курсе состояния «здоровья» операционной системы, а так же выполнять некоторые процедуры для поддержания ее работоспособности.
В вашу FreeBSD встроены автоматически запускающиеся сценарии для выполнения практически всех часто применяющихся рутинных операций администрирования. Вам даже не придется знать как вообще пишутся сценарии. Обратная сторона медали заключается в том, что любой сценарий может быть уязвим перед злоумышленником. Поэтому со сценариями надо поступать так же как и с демонами - использовать только те, которые вам действительно необходимы, отбрасывая все лишнее.
Сценарии, о которых мы будем говорить, находятся в каталоге /etc/periodic, где они рассортированы по трем подкаталогам, которые соответствуют периодичности их запуска - ежедневно, еженедельно и ежемесячно:
ls -F /etc/periodic
./ monthly/
../ weekly/
daily/
Имена сценариев начинаются с чисел, которые задают порядок их выполнения. Таким образом сценарий, название которого начинается с числа «120» будет выполнен перед сценарием, начинающимся на «300». Все сценарии помечены признаком выполняемого файла, на что указывает символ «*» в выводе команды ls -F:
И наконец, каждый из этих сценариев является сценарием оболочки Bourne (в этом можно убедиться посмотрев на первую строчку сценария - #/bin/sh), а это значит, что вы всегда можете протестировать любой из этих сценариев, запустив его в оболочке sh:
Вы, наверное, помните, что демон cron использует системный файл crontab для того, что бы определить, когда сценарии должны быть запущены в каждом каталоге. Вот часть файла crontab, в которой это отражено:
Таким образом демон cron вызывает программу periodic, для запуска необходимых ежедневных сценариев - каждую ночь в 3:01, для запуска еженедельных - каждую субботу в 4:15 и для ежемесячных - в 5:30 утра в каждый первый день месяца. Программа periodic имеет собственный конфигурационный файл, который называется periodic.conf, в котором указывается какие именно сценарии будут запускаться, а какие в свою очередь должны быть отключены.
Ваша FreeBSD уже имеет установленный по умолчанию конфигурационный файл periodic.conf, давайте посмотрим начало этого файла:
В этом файле ясно сказано, что вы не должны вносить в него никаких изменений. Вам на выбор предлагается два места в которых вы можете хранить свои собственные файлы periodic.conf, значения указанных в них параметров будут переопределять соответствующие значения в файле /etc/defaults/periodic.conf. Если вы попробуете найти эти файлы, вы обнаружите что их нет на диске, поскольку подразумевается что именно вы должны их создать:
more /etc/periodic.conf
/etc/periodic.conf: no such file or directory
more /etc/periodic.conf.local
/etc/periodic.conf.local: no such file or directory
Перед тем как приступить к созданию вашего собственного настроечного файла, следует ознакомиться с тем, что делает каждый сценарий, для того что бы решить - имеется ли необходимость в его запуске или нет.
Давайте посмотрим что делает каждый сценарий, а так же узнаем запускается он по умолчанию или нет. Эта информация содержится в странице руководства, вызываемой командой man periodic.conf. Я свел все эти данные в следующую таблицу:
Название
сценария
Производимое действие
Запу-
скается
по
умо-
лчанию
Ежедневно запускаемые сценарии:
100.clean_disks
Удаляет все файлы по маске
НЕТ
110.clean_tmps
Очищает каталоги временных файлов
НЕТ
120.clean_preserve
Удаляет старые файлы из /var/preserve
ДА
130.clean_msgs
Удаляет старые системные сообщения из каталога /var/msg
ДА
140.clean_rwho
Удаляет старые файлы в каталоге /var/rwho
ДА
150.clean_hoststat
Удаляет старые файлы в каталоге /var/spool/.hoststat
ДА
200.backup_passwd
Делает резервное копирование файлов /etc/master.passwdи /etc/group, а так же сообщает о их изменении со времени последнего резервирования
ДА
210.backup_aliases
Делает резервное копирование файла /etc/mail/aliasesfile, а так же сообщает о его изменении со времени последнего резервирования
ДА
220.backup_distfile
Делает резервное копирование файла /etc/Distfile и показывает его изменения
ДА
300.calendar
Проводит ежедневный запуск calendar -a
НЕТ
310.accounting
Проводит ротацию данных системы аккаунтинга
ДА
320.distfile
Запускает rdist(1)
ДА
330.news
Запускает сценарий /etc/news.expire
ДА
340.uucp
Запускает сценарий /etc/uuclean.daily
ДА
400.status_disks
Запускает df(1) и dump -W
ДА
410.status_uucp
Запускает uustat -a
ДА
420.status_network
Запускает netstat -i
ДА
430.status_rwho
Запускает uptime(1)
ДА
440.status_mailq
Запускает mailq(1)
ДА
450.status_security
Запускает сценарий /etc/security
ДА
460.status_mail_rejects
Выдает статистику по отвергнутым почтовым соединениям, которая хранится в /var/log/maillog
ДА
470.status_named
Выдает статистику о отвергнутых запросах на передачу информации о зонах с DNS серверов
ДА
500.queuerun
Запускает обработку почтовой очереди
ДА
999.local
Выполняет пользовательские сценарии указанные в файле /etc/daily.local
Сценарии для еженедельного выполнения
120.clean_kvmdb
Удаляет старые /var/db/kvm_*.dbфайлы
ДА
300.uucp
Запускает /usr/libexec/uucp/clean.weekly
ДА
310.locate
Запускает /usr/libexec/locate.updatedb
ДА
320.whatis
Запускает /usr/libexec/makewhatis.local
ДА
330.catman
Запускает /usr/libexec/catman.local
НЕТ
340.НЕТid
Обнаруживает файлы с неправильным владельцем и группой-владельцем (так называемые сироты)
НЕТ
400.status_pkg
Используя pkg_version(1) показывает список устаревших программных пакетов
НЕТ
999.local
Выполняет список дополнительных сценариев, указанных в файле /etc/weekly.local
Сценарии для ежемесячного выполнения
200.accounting
Выводит информацию системы пользовательского аккаунтинга, используя команду ac(8)
ДА
999.local
Выполняет список дополнительных сценариев, указанных в файле /etc/monthly.local
Итак теперь вы узнали, что сценариев не так уж и много и большинство из них по умолчанию отрабатываются. Давайте станем суперпользователем и скопируем поставляемый во FreeBSD файл /etc/defaults/periodic.conf в /etc/periodic.conf, для последующего редактирования:
su
Password:
cp /etc/defaults/periodic.conf /etc/periodic.conf
Затем я открыл /etc/periodic.conf в моем любимом текстовом редакторе (попробуйте ee /etc/periodic.conf - прим. переводчика) и прошелся по интересующим меня строкам. Давайте начнем со следующего куска:
Итак мы видим, что по умолчанию, результаты выводимые ежедневно выполняющимися сценариями отсылаются по почте пользователю root. Если вы проверите почту пользователя root, то вы обнаружите там письма с темой «hostname daily run output», и, если вы прочитаете одно из таких писем, то его содержимое будет состоять из результатов работы сценариев, которые в таблице помечены знаком «ДА». Вы можете сделать так, что бы эти сообщения отсылались не пользователю root, а любому другому, если поменяете значение параметра daily_output с root на необходимое.
Если требуется, то вы можете указать не имя пользователя, а путь к файлу, в котором будет сохраняться все сообщения от сценариев, обычно этот файл называется /var/log/daily.log. По умолчанию этот файл не существует, поэтому вам потребуется его создать, это можно сделать отдав команду: touch /var/log/daily.log.
Давайте рассмотрим ежедневно выполняемые сценарии. Заметьте, что порядок выполнения сценариев имеет четкую логику: сначала выполняются сценарии удаляющие устаревшие файлы, затем идут сценарии задачей которых является резервное копирование и в самом конце находятся сценарии выполняющие разнообразные полезные программы.
Этот сценарий по умолчанию выключен, однако вы можете его включить, если ваша система испытывает проблемы со свободным дисковым пространством (этот сценарий предназначен для удаления файлов с определенными расширениями - прим. переводчика). Перед тем как включить этот сценарий, сделайте резервное копирование важных файлов, а так же обязательно посмотрите на список удаленных файлов, для того что бы убедиться, что сценарий не удалил что-нибудь важное. Это особенно важно, если вы решили добавить свои расширения в список для удаления.
Следующий сценарий по умолчанию тоже выключен и может быть включен, если у вас мало свободного места (этот сценарий предназначен для очистки каталогов с временными файлами - прим. переводчика).
Перед тем, как включить сценарий clean-tmps, имейте в виду, что в некоторых версиях FreeBSD у него существуют проблемы с безопасностью. Если вы еще не знаете о существовании бюллетеней безопасности FreeBSD (security advisories - SA), то обязательно занесите в «избранное» и время от времени читайте информацию размещенную на http://www.freebsd.org/security/index.html#adv. Подписавшись на один из листов рассылки на этом сайте, вы будете получать бюллетени безопасности о найденных уязвимостях и способах их устранения. Бюллетень безопасности посвященный уязвимости в вышеупомянутом сценарии называется FreeBSD-SA-01:40.fts.v1.1.asc.
Следующий сценарий очищает каталог /var/preserve. Если вы не знаете что хранится в этом каталоге, посмотрите страницу руководства (man hier) и поищите там слово «preserve»:
man hier
/preserve
preserve/ temporary home of files preserved after
an accidental death of an editor; see ex(1)
preserve/ временное хранилище для файлов,
оставшихся после аварийного завершения
текстового редактора. См. man ex
Теперь, когда вы знаете что находится в каталоге preserve, вы можете решить, оставить или нет включенным этот сценарий.
Следующий сценарий удаляет сообщения посланные командой msgs. Если вы не используете эту утилиту, вы можете выключить этот сценарий, поскольку сообщений для удаления все равно нет. Если вы не уверены, используете ли вы эту утилиту или нет, то для того что бы узнать точно, прочитайте man msgs.
# 130.clean-msgs
daily_clean_msgs_enable="YES" # Ежедневно удалять сообщения
daily_clean_msgs_days= # Если не изменялись Х дней
Для того что бы принять решение о необходимости следующего сценария вам так же следует прочитать страницу руководства, на этот раз посвященную rwho. Если ваша машина с FreeBSD не подключена к сети UNIX-станций, то вы можете выключить этот сценарий, поскольку каталог /var/rwho будет всегда пуст.
У вас в системе может быть, а может и не быть файл hoststat. Для того что бы узнать почему, прочитайте следующий текст: http://www.geocrawler.com/archives/3/169/1999/3/0/1437080. У меня этого файла нет, поэтому я выключил этот сценарий:
Теперь у нас на очереди три сценария делающих резервное копирование. Вы наверняка не откажетесь от того что бы система ежедневно осуществляла резервное копирование ваших файлов с паролями и сведениями о группах. Этот сценарий не только резервирует эти файлы, но и дополнительно сообщает о появившихся в них за день изменениях. Вы должны ежедневно просматривать результат работы этого сценария.
# 200.backup-passwd
daily_backup_passwd_enable="YES" # Резервировать passwd & group
Ежедневное резервное копирование ваших почтовых алиасов (псевдонимов) будет хорошей мыслью. Вот сценарий который занимается именно этим.
Если вы не используете программу rdist для поддержки идентичности файлов на разных машинах, то у вас нет файла /etc/Distfile, и, соответственно, вы можете выключить следующий сценарий.
Программа calendar интересна, но по умолчанию не активирована. Если вам нравится программа fortune, и вы любите читать про разные интересные факты, то вероятно вам стоит запускать утилиту calendar.
Для начала надо решить какой именно календарь будет интересен вам и вашим пользователям. Возможные варианты находятся в каталоге /usr/share/calendar (обратите внимание, что есть календарь и для русскоязычных пользователей - прим. переводчика):
Любой пользователь, знающий о каталоге с календарями может посмотреть какие факты произошли сегодня и завтра, указав в параметре -f название файла с календарем:
calendar -f calendar.birthday
Nov 4 King William III of Orange born, 1650
Nov 5 Roy Rogers born, 1912
Однако по умолчанию, если пользователь не будет находиться в этом каталоге и не укажет полное имя файла желаемого календаря, то он получит следующее сообщение об ошибке:
Для того что бы решить эту проблему, скажите пользователю, что бы он создал у себя в домашнем каталоге подкаталог и скопировал туда необходимый ему календарь:
cd
mkdir .calendar
cp /usr/share/calendar/calendar.world .calendar/calendar
Мне нравится файл calendar.world, так как он включает в себя календари с днями рождения, с музыкальными, компьютерными, историческими и праздничными датами. Поскольку я сохранил его под названием «calendar», то я могу просто писать calendar в командной строке не указывая параметров и не заботясь о том, в каком каталоге я нахожусь:
Теперь давайте вернемся к сценариям. Если вы включите «календарный» сценарий, он будет посылать по почте настроенный вами вывод программы calendar всем пользователям у которых есть в домашнем каталоге файл .calendar. Суперпользователь будет получать такое письмо вне зависимости от наличия у него в каталоге такого файла. Создайте каталог с календарями, станьте суперпользователем и напишите:
calendar -a
Если вы проверите ваш почтовый ящик, то вы обнаружите там сообщение с темой «Day_of_the_Week Calendar». Если ваши пользователи хотят получить такие сообщения ежедневно, включите соответствующий сценарий:
# 300.calendar
daily_calendar_enable="NO" # Выполнить calendar -a
На сегодня все, в следующей части статьи мы закончим обзор «периодических» сценариев.
Пользователь, поставивший Linux тут же задается вопросом: “А что дальше?”. Сейчас я постараюсь ответить на этот вопрос. Итак, с первой задачей, установкой системы, вы видимо уже справились... подробнее
Итак, Linux, операционная система, где консоль играет наиважнейшую роль. Есть масса людей, которые и вовсе не ставят Х-сервер и работают на черном экранчике с белыми буквами (на самом деле консоль можно модернизировать, так что и KDE позавидует:))... подробнее
Оффисные приложения в операционной системе Linux развиты на сегодняшний день достаточно чтобы полностью заменить оные в Винде. И это не шутка! Офис в Linux ничуть не уступает своему конкуренту от Microsoft... подробнее
Сегодня Linux уже не просто консоль – пингвин обладает на данный момент массой великолепных графических оболочек. При этом естественно и мультимедиа возможности Линукса тоже сильны... подробнее
О как близки два этих понятия! Интернет и Линукс. Линукс великолепно подходит вам если вы хотите серфить глобальные просторы интренет. В “пингвине” можно найти все... подробнее