Сценарии автоматического запуска и завершения работы в IBM AIX

Автоматические запуск и завершение работы приложений

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

Дэвид Тенсли, системный администратор, Ace Europe

фото Дэвида ТенслиДэвид Тенсли (David Tansley) — один из внештатных авторов IBM developerWorks. У него более 15 лет опыта администрирования UNIX-систем, а последние 8 лет он специализируется на AIX. В сферу его личных интересов входят бадминтон и Формула 1, но наибольшее удовольствие он получает, путешествуя на своём мотоцикле вместе с женой.



23.09.2013

Автоматический запуск работающих в системе служб или приложений при ее перезагрузке (которая может произойти как в дневное, так и в ночное время – например, по причине отключения электроэнергии) может оказаться весьма полезным. Иногда так и происходит. Хорошо, если служба запускается автоматически и вам не приходится подключаться к системе и запускать ее вручную. Тем не менее встречаются ситуации, когда автоматический запуск служб нежелателен. Такие ситуации могут встретиться в кластерной среде, когда различные службы распределены по нескольким узлам кластера IBM® AIX® и для правильной работы должны запускаться в строго определенной последовательности. В таком случае может потребоваться последовательно запускать их вручную.

Способы запуска и завершения работы

Для автоматического запуска служб в AIX существует файл /etc/inittab, с помощью которого можно выполнять следующие действия:

  • Запускать службы непосредственно из файла inittab, содержащего команду или сценарий для выполнения.
  • Использовать общий сценарий, который обычно называется rc.local и вызывается из файла inittab, содержащий одну или несколько команд (или сценариев) для выполнения.
  • Использовать директории rc.runlevel, вызываемые из файла inittab.

Для автоматического завершения работы служб при выключении системы в AIX предусмотрены следующие средства:

  • Сценарий /etc/rc.shutdown. Этот файл работает аналогично файлу rc.local, только в нем перечислены службы, которые должны запускаться в тот момент, когда операционная система получает команду завершить работу.

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

Записи в файле inittab имеют следующий формат:

идентификатор : уровень выполнения : действие : команда

Здесь

  • идентификатор – уникальное имя записи. Старайтесь создавать идентификаторы длиной от 1 до 7 символов, чтобы запись имела удобочитаемый вид.
  • уровень выполнения – номер уровня выполнения, при достижении которого указанная в inittab команда будет запущена.
  • действие – определяет, каким образом должна быть интерпретирована команда при переходе на требуемый уровень выполнения (дополнительную информацию вы найдете далее в этой статье).
  • команда – сама команда, которую необходимо выполнить.

Каждое поле записи отделяется двоеточием (":").

При добавлении записей в файл inittab необходимо убедиться в следующем:

  • В файле нет опечаток. Известно, что при наличии опечаток в файле inittab AIX зацикливается и команда init не может корректно прочитать его.
  • Идентификатор является действительно уникальным. Другими словами, если в файле inittab встречаются две записи с одинаковыми идентификаторами, то вторая запись может отработать совсем не так, как ожидается.

Если команда или сценарий, вызываемый из файла /etc/rc.shutdown, содержит опечатки (допущены ошибки в синтаксисе или требуемые файлы не могут быть найдены), то операция завершения работы (если она вызвана по команде shutdown) не будет выполнена. Поэтому перед вызовом сценариев из файла rc.shutdown убедитесь в их правильной работе.

Как получить различную информацию о системе.
                
Время непрерывной работы системы:
#uptime
01:25PMup236days,3:54,

Текущий уровень выполнения:
#cat/etc/.init.state
2

Другой способ узнать текущий уровень выполнения:
$ who -r
run-level 2 May 24 16:29       2    0    S

Время последней перезагрузки компьютера с AIX:
#who-b
systembootFeb1719:13

Изменения уровней выполнения на компьютере с AIX:
#/usr/lib/acct/fwtmp</var/adm/wtmp|greprun-level

TueMay2112:24:43BST2013

run-levelh10015000621369135516

TueMay2112:25:16BST2013
run-level210006201231369135516
TueMay2112:25:16BST2013

Добавление комментариев

При добавлении комментариев в файл inittab помните о том, что двоеточие (':') в начале строки означает комментарий, и при чтении inittab вся оставшаяся строка будет проигнорирована. Не используйте для добавления комментариев символ решетки ('#'). Тем не менее символ '#' можно использовать для добавления комментария в конце строки.

Записи inittab

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

Вот, как будет выглядеть эта запись:

mailout:2:once:/usr/local/bin/mailout > / dev/null 2>&1 #mail users

Здесь используются следующие параметры:

  • mailout: уникальный идентификатор.
  • 2: сценарий будет запущен при переходе системы на уровень выполнения 2 (используется по умолчанию).
  • once: запуск сценария без ожидания завершения его работы; init продолжит обрабатывать остальные записи в inittab. Если сценарий завершится с ошибкой, он не будет запущен повторно.
  • /usr/local/bin/mailout: полный путь и имя выполняемого сценария; обратите внимание на то, что вывод направляется в устройство /dev/null. С помощью символа решетки (#) в конце строки помещен комментарий с описанием действия, которое выполняет сценарий.

Для полноты картины приводим весь сценарий:

!/bin/sh
# mailout
/usr/sbin/sendmail -t <<mayday
From: `hostname`
To: rs6admins
Subject: `hostname` P-Series is up
The AIX `hostname` is now up, please check services.
.
mayday

В рассмотренном выше примере указан атрибут once для однократного запуска сценария. Тем не менее, можно использовать и другие атрибуты. Два других наиболее часто используемых атрибута – это respawn и wait. При использовании параметра respawn (перезапуск) команда будет запущена, но процесс init не будет ожидать завершения ее работы. Если в процессе работы команды возникнут ошибки и она прервется, то inittab перезапустит ее, и процесс продолжится. В таких случаях следует выяснить, какая команда постоянно перезапускается, т. е. работает практически постоянно. Время последнего перезапуска можно увидеть с помощью команды ps -ef (оно будет содержаться в поле STIME). Как правило, перезапускаются следующие процессы: tty, cron, приложения мониторинга баз данных, а также утилиты на базе файловой системы Network File System (NFS). Второе действие, которое можно указать для команды – это wait (ожидание). В этом случае init запускает команду, ожидает завершения ее работы и только после этого переходит к обработке следующей записи inittab. Обычно параметр wait используется для приложений сетевой аутентификации и печати, служб резервного копирования и т. д.

Если вам необходимо запустить процесс, владельцем которого не должен являться пользователь root, то в файле inittab можно использовать команду su. В следующем примере запускается сценарий /home/ampter/start.sh с использованием команды su, позволяющей запустить этот процесс пользователю ampter. Обратите внимание на кавычки, в которые заключена часть команды:

amps:2:once:su - ampter "-c /home/ampter/start.sh" > /dev/console 2>&1

При редактировании файла inittab не забудьте проверить все записи после его сохранения. После этого снова проверьте все сделанные изменения. Поверьте мне, никто не хочет получить нерабочий файл inittab. Если вы недостаточно уверены в себе, чтобы редактировать файл вручную, вам помогут следующие утилиты AIX:

  • chitab: изменяет существующую запись в inittab.
  • lsitab: выводит список записей inittab.
  • mkitab: добавляет запись в inittab.
  • rmitab: удаляет запись из inittab.

Остановка перезапускаемого процесса

Если требуется остановить постоянно перезапускаемый процесс (например, для проведения профилактических работ), то сначала отредактируйте файл inittab, поместив в начало требуемой строки знак комментария. Таким образом, init не будет считывать эту строку. В следующем примере показана игнорируемая inittab запись, закомментированная с помощью двоеточия в начале строки.

:fmc:2:respawn:/opt/db2_09_05/bin/db2fmcd #DB2 Fault Monitor Coordinator

Далее заставьте init перечитать файл inittab:

telinit q

Теперь остановите приложение и выполните все необходимые действия. Чтобы снова запустить процесс из файла inittab, просто раскомментируйте строку, удалив двоеточие в начале. После этого запустите в командной строке следующую команду для повторного чтения файла inittab:

telinit q

Процесс будет перезапущен.

Сценарий rc.local

Другой распространенный способ запуска приложений или команд при загрузке системы заключается в использовании файла /etc/rc.local. Этот файл является исполняемым сценарием, вызываемым из inittab. Файл rc.local содержит одну или несколько определяемых пользователем команд, которые должны выполняться при загрузке операционной системы. На мой взгляд, этот файл следует использовать только для запуска отдельных команд и не следует использовать для запуска служебных сценариев автозагрузки.

Стандартная запись, позволяющая вызвать rc.local из файла inittab, имеет следующий вид:

rcloc:2:wait:/etc/rc.local > /dev/console 2>&1

В рассмотренном выше примере в качестве действия указан параметр wait. Таким образом, init будет ждать завершения выполнения всех команд и только потом перейдет к обработке оставшихся записей inittab. Я использую файл rc.local для запуска временных или пользовательских команд (например, для отключения области подкачки или сетевого интерфейса), но не для запуска служебных сценариев автозапуска – такие команды я указываю в файле inittab.

Остановка служб

При запуске команды shutdown вызывается файл etc/rc.shutdown, который также является исполняемым сценарием. В этом файле содержатся команды или сценарии, останавливающие пользовательские службы. Я считаю хорошей привычкой отдельный запуск файла /etc/rc.shutdown перед завершением работы AIX.

/etc/rc.shutdown

Это позволяет быть уверенным в том, что работа всех приложений будет завершена корректно. После этого можно запускать команду shutdown, которая еще раз запустит файл rc.shutdown. Однако об этом уже можно не беспокоиться.


Заключение

Тонкая настройка файлов inittab и shutdown обеспечивает понятное управление запуском и остановом служб и приложений. Для запуска одноразовых команд при загрузке операционной системы хорошо подойдет файл rc.local.


Ресурсы

Главная страница AIX inittab (EN)

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=946043
ArticleTitle=Сценарии автоматического запуска и завершения работы в IBM AIX
publish-date=09232013