Введення в автоматизацію. Частина 1, Linux, Операційні системи, статті

Станіслав Лапшанскій

Стаття є перекладом тексту Dru Lavigne, опублікованого за адресою: www.onlamp.com/pub/a/bsd/2001/11/08/FreeBSD_Basics.html.

Зовсім недавно, в статті «Як змусити 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. Я звів всі ці дані в наступну таблицю:


Назва сценарію Вироблене дію Запускається за замовчуванням
Щодня запускаються сценарії:
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 – прим. Перекладача) і пройшовся по цікавлять мене рядках. Давайте почнемо з наступного шматка:

# 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), то обов’язково занесіть в «вибране» і час від часу читайте інформацію розміщену на 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, ви можете вирішити, залишити чи ні включеним цей сценарій.

# 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. Для того що б дізнатися чому, прочитайте наступний текст: www.geocrawler.com/archives/3/169/1999/3/0/1437080. У мене цього файлу немає, тому я вимкнув цей сценарій:

# 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

На сьогодні все, в наступній частині статті ми закінчимо огляд «періодичних» сценаріїв.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*