Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение. |
Управление процессами
Планирование запуска процессов
Вынесете ли вы сегодня мусор или пойдете в магазин, поедете на заправку кормить своего железного коня бензином или просто ляжете спать пораньше – так или иначе, какое-нибудь дело вы сегодня сделаете. Дела, которые вы делаете, могут быть однократными (купить щенка) или регулярными (погулять с собакой). Может быть, "однократные" – не совсем точное прилагательное, потому что щенка вы можете купить и раз, и два, и еще много раз в жизни. Но вряд ли это дело можно назвать регулярным – не станете же вы раз в год ровно в полночь 13 марта покупать щенка!
Все-таки станете? Вы не сатанист, часом?
Еще приятнее запланировать выполнение нерегуряного или регулярного дела так, чтобы его делал кто-то другой. Например, сообщите сыну, что вы просите его завтра в полдень отправиться в клуб собаководов и купить там щеночка. Однократно. А потом (когда купит) скажите, что вы запланировали его (сына) прогулки с ним (щеночком) ежедневно – на годы вперед.
Системный администратор, даже если у него нет сына и щеночка, тоже не лишен радостей планирования. Так, для планирования однократных действий в любом UNIX используется программа at, а для регулярных – crontab.
at
Для планирования однократного запуска задач в строго определенное время (точность – одна минута) используется программа at. Она создает и изменяет список задач для выполнения, размещая его в каталоге /var/spool/cron/atjobs/. В Solaris это именно такой каталог, в других системах местоположение очереди задач может быть иным. Список задач ежеминутно инспектируется демоном cron, который отвечает за своевременный запуск задач. Во многих других системах UNIX демон cron не отвечает за задания, запланированные с помощью at, и для последних имеется специальный демон-запускатель atd.
Чтобы at могла верно запланировать задачи, следует указать ей время и дату запуска задачи:
at time date
Параметр time может быть в форме HH:MM (часы:минуты), или словом midnight, noon, now, или временем с суффиксом AM или PM в североамериканском формате. Дата должна быть либо в формате название_месяца день [год], либо MMDDYY, либо MM/DD/YY, либо DD.MM.YY. Также можно указать время в виде now+ n единицы, где единицы – это minutes, hours, days, weeks. Можно указать для времени суффикс today или tomorrow.
Указание time без date означает выполнение задачи в текущие сутки, а если time сегодня уже прошло, то завтра в указанное время.
Программа at принимает список задач для выполнения во входной поток.
at –l (или atq ) распечатывает список поставленных в очередь задач
at –r позволяет удалить задачу по идентификатору, который показывает at –l.
В некоторых системах at –r называется atrm. В Solaris приемлемы оба варианта.
Суперпользователь всегда может воспользоваться at.
Обычному пользователю разрешается использовать at в случае, если его имя указано в файле /usr/lib/cron/at.allow. Если этого файла нет, то проверяется, нет ли имени пользователя в /usr/lib/cron/at.deny (если есть, ему запрещается использование at ). Если ни одного из этих двух файлов нет, пользоваться at разрешается только пользователям, которым назначен набор полномочий1 solaris.jobs.user (по умолчанию – только пользователю root). Если есть только файл /usr/lib/cron/at.deny и он пуст, то по умолчанию всем разрешено пользоваться at. В файлах at.deny и at.allow имена пользователей пишутся по одному в строке.
Задания at и crontab заблокированного пользователя не запускаются. Демон cron запустит задания только того пользователя, который имеет легальный доступ в систему в настоящее время, как отражено в файле /etc/shadow.
Задание, запущенное на выполнение демоном cron, выполняется от имени пользователя, который поставил задание в очередь. Стандартный вывод и стандартный поток ошибок задания cron высылает почтой этому пользователю. Можно указать иное место для вывода информации с помощью ключа m команды at или с помощью параметра в файле crontab (см. ниже). Запланированные задачи выполняются в среде командного процессора /bin/sh без назначения управляющего терминала (т.е. вне терминальной группы, связанной с конкретным терминалом).
Проведем небольшой эксперимент. Вначале убедимся, что каталог, где сохраняются задания at, пуст.
ls /var/spool/cron/atjobs/
Проверим время и дату.
date Сбт 15 Май 2004 19:10:29
Запланируем создание файла в корневом каталоге через две минуты.
at 1912 at> touch /tuition at> <Ctrl-D> commands will be executed using /sbin/sh job 1084633920.a at Сбт Май 15 19:12:00 2004
В каталоге, где собираются задания в очереди на выполнение, появился новый файл:
ls /var/spool/cron/atjobs/ 1084633920.a
И по команде at –l мы получаем информацию о поставленном в очередь задании (указывается имя пользователя, инициировавшего задание, идентификатор задания, по которому его можно удалить, и время планируемого запуска).
at -l user = root 1084633920.a Сбт Май 15 19:12:00 2004
Пока в корневом каталоге файла tuition нет:
ls / bin devices lib opt tmp xfn boot etc lost+found platform TT_DB cdrom export mnt proc usr core home net sbin var dev kernel nsmail test vol
Почему? Да время еще не наступило:
date Сбт 15 Май 2004 19:11:42
Дожидаемся заданного времени и (о чудо!) файл /tuition появился! Смотрите:
date Сбт 15 Май 2004 19:12:12 ls / bin devices lib opt tmp vol boot etc lost+found platform TT_DB xfn cdrom export mnt proc tuition core home net sbin usr dev kernel nsmail test var
cron
Демон cron ежеминутно инспектирует таблицу запланированных задач и выполняет те задачи, время которых наступило (в Solaris – не более 100 задач в минуту). Программа at нужна, как видно из раздела "at" выше, для планирования однократных задач, а программа crontab служит для планирования периодически запускаемых процессов. Они подготавливают таблицу заданий для cron.
У каждого пользователя есть своя таблица crontab. Ее можно отредактировать командой crontab –e. По этой команде вызывается текстовый редактор (обычно – vi ), а в качестве файла для редактирования окажется таблица crontab. Если вы раньше не задавали никаких периодических задач, файл будет пустым.
Формат таблицы crontab: каждая строка описывает одну задачу, в строке содержится 6 полей:
mm hh dd mo dw command
- mm – минуты от 0 до 59
- hh – часы от 0 до 23
- dd – числа от 1 до 31
- mo – месяцы от 1 до 12
- dw – дни недели от 0 до 7, 0 и 7 – это воскресенье.
- command – команда командному процессору, которую надо запустить (возможно, с аргументами).
Каждое числовое поле в таблице может содержать число, несколько чисел через запятую, диапазон (начало и конец диапазона через дефис) или звездочку. Звездочка в соответствующем поле означает "каждую единицу времени", например, в поле часов она означает "каждый час".
Если в строке указаны определенное число месяца и определенный день недели, то для выполнения команды достаточно, чтобы наступило либо это число, либо этот день недели.
Так, строка
12 10 * * 0 rm -rf /var/log/*.[0-9]
означает, что в 10:12 каждое воскресенье нужно удалять файлы *.[0-9] из /var/log.
Однако, если было бы написано
12 10 10 * 0 rm -rf /var/log/*.[0-9]
это бы требовало выполнять такое удаление "в 10:12 по воскресеньям и десятым числам", а не "в 10:12 десятого числа, если оно приходится на воскресенье".
Как и в случае с at, команда запускается от имени владельца таблицы, в качестве командного процессора используется /bin/sh.
В первых строках таблицы могут быть установлены переменные среды окружения. Наиболее полезна может оказаться переменная среды окружения PATH:
PATH=/usr/bin:/usr/sbin:/usr/local/bin
В ней можно задать каталоги, которые по умолчанию не входят в PATH.
Кроме PATH можно установить переменные SHELL и HOME, а также MAILTO. По умолчанию HOME (домашний каталог) берется из /etc/passwd. Переменная LOGNAME устанавливается автоматически при запуске команды. Ей присваивается имя пользователя, от имени которого запускается команда. В BSD-системах она может называться USER, в Solaris есть обе переменные. LOGNAME и USER нельзя переопределить, HOME и SHELL – можно. Программа cron отправит сообщение владельцу таблицы crontab, если найдет повод это сделать (например, произошла ошибка выполнения команды). Если переменная MAILTO существует и ее значение отлично от пустой строки, то cron расценит это значение как имя адресата, которому надо послать письмо, вместо пользователя, запланировавшего задачу. Если переменная MAILTO есть и ее значение – пустая строка, то почта послана не будет. Установка любой переменной среды окружения в таблице crontab осуществляется так:
имя_переменной = значение
Пробелы вокруг знака равенства необязательны, а пробелы после значения будут трактоваться как часть значения. Поэтому значение лучше заключать в апострофы или кавычки для явного указания пробелов в начале и конце значения.
Для просмотра таблицы crontab используйте команду crontab -l, для удаления таблицы – crontab –r. Можно создать файл с таблицей crontab заранее и установить ее в систему командой
crontab имя_файла_таблицы.
Такая команда потенциально опасна: если раньше существовали какие-либо команды в таблице crontab, то они потеряются навсегда.
Регулярно выполняемые системные скрипты
В Solaris нет стандартно принятых по умолчанию регулярно выполняемых скриптов. Однако, рекомендуется их создать и расположить в каталоге /var/admin/cron/ или /etc/periodic/.
crontab -e 22 * * * * /var/admin/cron/hourly 22 22 * * * /var/admin/cron/daily 2 22 * * 0 /var/admin/cron/weekly 2 2 1 * * /var/admin/cron/monthly
В скрипт hourly рекомендуется включать проверку состояния сетевого подсоединения (ping), проверку и при необходимости установку прав доступа к почтовым ящикам пользователей, проверку состояния основных демонов (syslog, sendmail, named, sshd) с помощью ps, архивацию и обновление файлов протоколов (log rotation), которые достаточно выросли за час (рекомендуемый размер файла протокола для архивации – 1-2 мегабайта, но вы можете выбрать иное, исходя из удобства последую- щего анализа этого файла).
В скрипт daily включают проверку очереди сообщений (не слишком ли велика – запустите mailq ), синхронизацию системного времени ( ntpdate, rdate ).
В скрипт weekly включают проверку свободного места на диске (если у вас это приходится делать чаще, чем раз в неделю, подумайте о покупке нового диска; и может быть, лучше сразу купить парочку?), проверку файлов passwd, shadow, hosts.allow и hosts.deny, файлов конфигурации ftpd, sendmail, протоколов utmp и wtmp на предмет прав доступа и размера.
Ежемесячный скрипт monthly обычно содержит архивацию и обновление тех файлов протоколов, которые растут медленно.
Вы можете включить в эти скрипты свои задачи, которые являются специфическими для конкретной системы – проверку конфигурации smbd для файлового сервера samba, проверку дисковых квот пользователей, контроль появления свежих файлов с установленным битом SUID и так далее.