| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Введение в автоматизацию. Часть 1 Статья является переводом текста Dru Lavigne, опубликованного по адресу: Совсем недавно, в статье «Как заставить cron выполнять наши приказания» мы рассмотрели использование демона cron. В сегодняшней статье мы сосредоточим внимание на реальных сценариях обслуживания системы, которые cron запускает ежедневно, еженедельно и ежемесячно. Вообще говоря, всегда разумно знать какие сценарии запускаются на вашем компьютере, поскольку любой сценарий это палка о двух концах. Их положительная сторона в том, что они могут держать вас курсе состояния «здоровья» операционной системы, а так же выполнять некоторые процедуры для поддержания ее работоспособности. В вашу FreeBSD встроены автоматически запускающиеся сценарии для выполнения практически всех часто применяющихся рутинных операций администрирования. Вам даже не придется знать как вообще пишутся сценарии. Обратная сторона медали заключается в том, что любой сценарий может быть уязвим перед злоумышленником. Поэтому со сценариями надо поступать так же как и с демонами - использовать только те, которые вам действительно необходимы, отбрасывая все лишнее. Сценарии, о которых мы будем говорить, находятся в каталоге /etc/periodic, где они рассортированы по трем подкаталогам, которые соответствуют периодичности их запуска - ежедневно, еженедельно и ежемесячно: ls -F /etc/periodic ./ monthly/ ../ weekly/ daily/ Имена сценариев начинаются с чисел, которые задают порядок их выполнения. Таким образом сценарий, название которого начинается с числа «120» будет выполнен перед сценарием, начинающимся на «300». Все сценарии помечены признаком выполняемого файла, на что указывает символ «*» в выводе команды ls -F: ls -F /etc/periodic/weekly ./ 320.whatis* ../ 330.catman* 120.clean-kvmdb* 340.noid* 300.uucp* 400.status-pkg* 310.locate* 999.local* И наконец, каждый из этих сценариев является сценарием оболочки Bourne (в этом можно убедиться посмотрев на первую строчку сценария - #/bin/sh), а это значит, что вы всегда можете протестировать любой из этих сценариев, запустив его в оболочке sh: cd /etc/periodic/daily sh 430.status-rwho Local system status: 8:25AM up 19 days, 21:34, 7 users, load averages: 0.41, 0.38, 0.29 Вы, наверное, помните, что демон cron использует системный файл crontab для того, что бы определить, когда сценарии должны быть запущены в каждом каталоге. Вот часть файла crontab, в которой это отражено: more /etc/crontab <вырезано> # do daily/weekly/monthly maintenance # запустить ежедневное/-недельное/-месячное обслуживание 1 3 * * * root periodic daily 15 4 * * 6 root periodic weekly 30 5 1 * * root periodic monthly <вырезано> Таким образом демон cron вызывает программу periodic, для запуска необходимых ежедневных сценариев - каждую ночь в 3:01, для запуска еженедельных - каждую субботу в 4:15 и для ежемесячных - в 5:30 утра в каждый первый день месяца. Программа periodic имеет собственный конфигурационный файл, который называется periodic.conf, в котором указывается какие именно сценарии будут запускаться, а какие в свою очередь должны быть отключены. Ваша FreeBSD уже имеет установленный по умолчанию конфигурационный файл periodic.conf, давайте посмотрим начало этого файла: head -20 /etc/defaults/periodic.conf #!/bin/sh # # This is defaults/periodic.conf - a file full # of useful variables that you can set to change # the default behaviour of periodic jobs on your # system. You should НЕТt edit this file! Put any # overrides into one of the $periodic_conf_files # instead and you will be able to update these defaults # later without spamming your local configuration # information. # # Это установленный по умолчанию periodic.conf - файл, заполненный # полезными переменными, значения которых вы можете менять для того # что бы изменить поведение периодически выполняемых заданий в вашей # системе. # Вы не должны менять этот файл. Поместите любые измененные значения # переменных в любой из файлов указанных в переменной $periodic_conf_files # для того что бы при обновлении этого файла ваши настройки не были утеряны. # # The $periodic_conf_files files should only contain # values which override values set in this file. This # eases the upgrade path when defaults are changed and # new features are added. # # Файлы названия которых указаны в переменной $periodic_conf_files могут # содержать только параметры значения которых перекрывают значения # параметров указанных в этом файле. Это упростит обновление системы, когда # при добавлении новых функций файл установок по умолчанию будет изменен. # # $FreeBSD: src/etc/defaults/periodic.conf,v 1.7.2.8 # 2001/07/28 11:44:22 brian Exp $ # # What files override these defaults ? # Какие файлы переписывают значения по умолчанию? periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local" # periodic script dirs local_periodic="/usr/local/etc/periodic /usr/X11R6/etc/periodic" В этом файле ясно сказано, что вы не должны вносить в него никаких изменений. Вам на выбор предлагается два места в которых вы можете хранить свои собственные файлы 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. Я свел все эти данные в следующую таблицу:
Итак теперь вы узнали, что сценариев не так уж и много и большинство из них по умолчанию отрабатываются. Давайте станем суперпользователем и скопируем поставляемый во 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 - прим. переводчика) и прошелся по интересующим меня строкам. Давайте начнем со следующего куска: # Daily options # These options are used by periodic(8) itself to # determine what to do with the output of the sub-programs # that are run, and where to send that output. $daily_output # might be set to /var/log/daily.log if you wish to log the # daily output and have the files rotated by newsyslog(8) # Эти параметры используются программой periodic для того что бы # задать, что делать с выводом запускаемых сценариев и куда # его отсылать. Переменная $daily_output может быть установлена в # "/var/log/daily.log", если вы хотите журналлировать ежедневный вывод # и иметь возможность его ротации при помощи newsyslog(8). daily_output="root" # user or /file daily_show_success="YES" # scripts returning 0 daily_show_info="YES" # scripts returning 1 daily_show_badconfig="NO" # scripts returning 2 Итак мы видим, что по умолчанию, результаты выводимые ежедневно выполняющимися сценариями отсылаются по почте пользователю root. Если вы проверите почту пользователя root, то вы обнаружите там письма с темой «hostname daily run output», и, если вы прочитаете одно из таких писем, то его содержимое будет состоять из результатов работы сценариев, которые в таблице помечены знаком «ДА». Вы можете сделать так, что бы эти сообщения отсылались не пользователю root, а любому другому, если поменяете значение параметра daily_output с root на необходимое. Если требуется, то вы можете указать не имя пользователя, а путь к файлу, в котором будет сохраняться все сообщения от сценариев, обычно этот файл называется /var/log/daily.log. По умолчанию этот файл не существует, поэтому вам потребуется его создать, это можно сделать отдав команду: touch /var/log/daily.log. Давайте рассмотрим ежедневно выполняемые сценарии. Заметьте, что порядок выполнения сценариев имеет четкую логику: сначала выполняются сценарии удаляющие устаревшие файлы, затем идут сценарии задачей которых является резервное копирование и в самом конце находятся сценарии выполняющие разнообразные полезные программы. # 100.clean-disks daily_clean_disks_enable="NO" # Ежедневно удалять файлы daily_clean_disks_files="[#,]* .#* a.out *.core *.CKP .emacs_[0-9]*" daily_clean_disks_days=3 # Если они старше Х дней daily_clean_disks_verbose="YES" # Выдавать список удаленных файлов Этот сценарий по умолчанию выключен, однако вы можете его включить, если ваша система испытывает проблемы со свободным дисковым пространством (этот сценарий предназначен для удаления файлов с определенными расширениями - прим. переводчика). Перед тем как включить этот сценарий, сделайте резервное копирование важных файлов, а так же обязательно посмотрите на список удаленных файлов, для того что бы убедиться, что сценарий не удалил что-нибудь важное. Это особенно важно, если вы решили добавить свои расширения в список для удаления. Следующий сценарий по умолчанию тоже выключен и может быть включен, если у вас мало свободного места (этот сценарий предназначен для очистки каталогов с временными файлами - прим. переводчика). # 110.clean-tmps daily_clean_tmps_enable="NO" # Ежедневно удалять временные файлы daily_clean_tmps_dirs="/tmp" # В этом каталоге daily_clean_tmps_days="3" # Если к ним не обращались более Х дней daily_clean_tmps_ignore=".X*-lock quota.user quota.group" # Такие файлы не удалять daily_clean_tmps_verbose="YES" # Показать список удаленных файлов Перед тем, как включить сценарий clean-tmps, имейте в виду, что в некоторых версиях FreeBSD у него существуют проблемы с безопасностью. Если вы еще не знаете о существовании бюллетеней безопасности FreeBSD (security advisories - SA), то обязательно занесите в «избранное» и время от времени читайте информацию размещенную на Следующий сценарий очищает каталог /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, вы можете решить, оставить или нет включенным этот сценарий. # 120.clean-preserve daily_clean_preserve_enable="YES" # Удалять файлы ежедневно daily_clean_preserve_days=7 # Если они не изменялись Х дней daily_clean_preserve_verbose="YES" # Показать список удаленных файлов Следующий сценарий удаляет сообщения посланные командой msgs. Если вы не используете эту утилиту, вы можете выключить этот сценарий, поскольку сообщений для удаления все равно нет. Если вы не уверены, используете ли вы эту утилиту или нет, то для того что бы узнать точно, прочитайте man msgs. # 130.clean-msgs daily_clean_msgs_enable="YES" # Ежедневно удалять сообщения daily_clean_msgs_days= # Если не изменялись Х дней Для того что бы принять решение о необходимости следующего сценария вам так же следует прочитать страницу руководства, на этот раз посвященную rwho. Если ваша машина с FreeBSD не подключена к сети UNIX-станций, то вы можете выключить этот сценарий, поскольку каталог /var/rwho будет всегда пуст. # 140.clean-rwho daily_clean_rwho_enable="YES" # Ежедневно удалять файлы rwho daily_clean_rwho_days=7 # Если они не изменялись Х дней daily_clean_rwho_verbose="YES" # Показать список удаленных файлов У вас в системе может быть, а может и не быть файл hoststat. Для того что бы узнать почему, прочитайте следующий текст: # 150.clean-hoststat daily_clean_hoststat_enable="YES" # Ежедневно стирать файл .hoststat daily_clean_hoststat_days=3 # Если он не изменялся Х дней daily_clean_hoststat_verbose="YES" # Выдать список удаленных файлов Теперь у нас на очереди три сценария делающих резервное копирование. Вы наверняка не откажетесь от того что бы система ежедневно осуществляла резервное копирование ваших файлов с паролями и сведениями о группах. Этот сценарий не только резервирует эти файлы, но и дополнительно сообщает о появившихся в них за день изменениях. Вы должны ежедневно просматривать результат работы этого сценария. # 200.backup-passwd daily_backup_passwd_enable="YES" # Резервировать passwd & group Ежедневное резервное копирование ваших почтовых алиасов (псевдонимов) будет хорошей мыслью. Вот сценарий который занимается именно этим. # 210.backup-aliases daily_backup_aliases_enable="YES" # Резервировать почтовые алиасы Если вы не используете программу rdist для поддержки идентичности файлов на разных машинах, то у вас нет файла /etc/Distfile, и, соответственно, вы можете выключить следующий сценарий. # 220.backup-distfile daily_backup_distfile_enable="YES" # Резервировать /etc/Distfile Программа calendar интересна, но по умолчанию не активирована. Если вам нравится программа fortune, и вы любите читать про разные интересные факты, то вероятно вам стоит запускать утилиту calendar. Для начала надо решить какой именно календарь будет интересен вам и вашим пользователям. Возможные варианты находятся в каталоге /usr/share/calendar (обратите внимание, что есть календарь и для русскоязычных пользователей - прим. переводчика): cd /usr/share/calendar ls -F . ./ calendar.holiday ../ calendar.judaic calendar.all calendar.music calendar.birthday calendar.russian calendar.christian calendar.usholiday calendar.computer calendar.world calendar.croatian de_DE.ISO_8859-1/ calendar.german hr_HR.ISO_8859-2/ calendar.history ru_SU.KOI8-R/ Это обычные текстовые файлы и вы можете легко их посмотреть и отредактировать их содержимое. Некоторые файлы содержат действительно ерундовые факты: more calendar.computer <вырезано> 01/01 AT&T officially divests its local Bell companies, 1984 01/01 The Epoch (Time 0 for UNIX systems, Midnight GMT, 1970) 01/03 Apple Computer founded, 1977 01/08 American Telephone and Telegraph loses antitrust case, 1982 01/08 Herman Hollerith patents first data processing computer, 1889 01/08 Justice Dept. drops IBM suit, 1982 01/10 First CDC 1604 delivered to Navy, 1960 01/16 Set uid bit patent issued, to Dennis Ritchie, 1979 01/17 Justice Dept. begins IBM anti-trust suit, 1969 (drops it, 01/08/82) 01/24 DG Nova introduced, 1969 <вырезано> А в некоторых других файлах сделаны подборки разных сведений: more calendar.all <вырезано> #include <calendar.world> #include <calendar.german> #include <calendar.usholiday> #include <calendar.croatian> #include <calendar.russian> <вырезано> Любой пользователь, знающий о каталоге с календарями может посмотреть какие факты произошли сегодня и завтра, указав в параметре -f название файла с календарем: calendar -f calendar.birthday Nov 4 King William III of Orange born, 1650 Nov 5 Roy Rogers born, 1912 Однако по умолчанию, если пользователь не будет находиться в этом каталоге и не укажет полное имя файла желаемого календаря, то он получит следующее сообщение об ошибке: cd calendar -f calendar.birthday calendar: no calendar file: ''calendar.birthday'' or ''~/.calendar/calendar.birthday Для того что бы решить эту проблему, скажите пользователю, что бы он создал у себя в домашнем каталоге подкаталог и скопировал туда необходимый ему календарь: cd mkdir .calendar cp /usr/share/calendar/calendar.world .calendar/calendar Мне нравится файл calendar.world, так как он включает в себя календари с днями рождения, с музыкальными, компьютерными, историческими и праздничными датами. Поскольку я сохранил его под названием «calendar», то я могу просто писать calendar в командной строке не указывая параметров и не заботясь о том, в каком каталоге я нахожусь: calendar Nov 4 King William III of Orange born, 1650 Nov 5 Roy Rogers born, 1912 Nov 4 UNIVAC I program predicts Eisenhower victory based on 7% of votes, 1952 Nov 4 Iranian militants seize US embassy personnel in Teheran, 1979 Nov 4 Soviet forces crush the anti-communist revolt in Hungary, 1956 Nov 5 Guy Fawkes' Plot, 1605 Nov 4 Flag Day in Panama Nov 4 Will Rogers Day Теперь давайте вернемся к сценариям. Если вы включите «календарный» сценарий, он будет посылать по почте настроенный вами вывод программы calendar всем пользователям у которых есть в домашнем каталоге файл .calendar. Суперпользователь будет получать такое письмо вне зависимости от наличия у него в каталоге такого файла. Создайте каталог с календарями, станьте суперпользователем и напишите: calendar -a Если вы проверите ваш почтовый ящик, то вы обнаружите там сообщение с темой «Day_of_the_Week Calendar». Если ваши пользователи хотят получить такие сообщения ежедневно, включите соответствующий сценарий: # 300.calendar daily_calendar_enable="NO" # Выполнить calendar -a На сегодня все, в следующей части статьи мы закончим обзор «периодических» сценариев. |
|
| ||||||||||||||||
|