воскресенье, 23 июня 2013 г.

Хитрости запуска служб в Linux.

Взято с: http://www.opennet.ru/base/sys/run_services_tips.txt.html 
 
Наверное не для кого не секрет что скрипты запускаемых служб в Linux
располагаются в  /etc/rc.d/init.d или /etc/init.d в зависимости от
дистрибутива.  Для того чтобы скрипт запускался автоматически во время
запуска системы надо создать символическую ссылку на скрипт и разместить
её в каталоге  /etc/rc.d/rcN.d или  /etc/rc.d/rcN.d, где N –
соответствует  уровню выполнения скрипта.

Уровень 0 
    остановка системы (halt) - работа системы должна быть прекращена; 

Уровень 1 
    однопользовательский режим работы - система инициализирует минимум
    служб и даёт единственному пользователю (как правило,
    суперпользователю) без проведения аутентификации командную строку.
    Как правило, этот режим используется для восстановления системы; 

Уровень 2 
    многопользовательский режим - пользователи могут работать на разных
    терминалах, вход в систему с процессом аутентификации; 

Уровень 3 
    многопользовательский сетевой режим - в отличие от предыдущего
    уровня, осуществляется настройка сети и запускаются различные
    сетевые службы; 

Уровень 4 
    не имеет стандартного толкования и практически не используется;

Уровень 5 
    запуск графической подсистемы - по сравнению с уровнем 3
    производится также старт графической подсистемы X11 , и вход в
    систему осуществляется уже в графическом режиме; 

Уровень 6 
    перезагрузка системы - при включении этого режима останавливаются
    все запущенные программы и производится перезагрузка. 

Чаще всего во время загрузке система использует уровни загрузки 3 или 5. 
Однако есть некоторая хитрость в названии самой символической ссылки, о
которой многие умалчивают, и которой я хочу рассказать. Например:
/etc/rc.d/rc0.d/K60crond и /etc/rc.d/rc3.d/S40crond, указывающие на один
скрипт /etc/init.d/crond службы системного журнала. Скрипт, начинающийся
с "K" соответствует останову службы, а "S" - запуску. Числа, следующие
перед именем службы задают порядок запуска скриптов в директории.
Например, скрипт /etc/rc.d/rc3.d/S34syslogd будет запущен до скрипта
/etc/rc.d/rc3.d/S40crond, тогда как /etc/rc.d/rc3.d/K60crond до
/etc/rc.d/rc3.d/K66syslogd. Можно заметить, что сумма чисел для одной
службы равна 100 - это позволяет упорядочить все скрипты в порядке
старта, обратном порядку завершения.  Создавать самому символические
ссылки весьма утомительно, и для этого лучше использовать специальную
утилиту  chkconfig.


Синтаксис её использования весьма прост:

        chkconfig --list [имя сервиса]
        chkconfig --add <имя сервиса>
        chkconfig --del <имя сервиса>
        chkconfig [--level <уровни>] <имя сервиса> <on|off|reset|resetpriorities>


Где  имя сервиса - это имя исполняемого скрипта находящегося в /etc/rc.d/init.d

Однако и тут есть небольшая хитрость, дело в том что скрипт запуска
должен иметь специальный формат, например такой:

        #!/bin/sh
        # chkconfig: - 98 02
        # description:  Описание процесса
        # processname: Имя процесса

        # Source function library.
        if [ -f /etc/init.d/functions ] ; then
          . /etc/init.d/functions
        elif [ -f /etc/rc.d/init.d/functions ] ; then
          . /etc/rc.d/init.d/functions
        else
          exit 0
        fi
        KIND="Имя_сервиса"
        start() {
                echo -n $"Starting $KIND services: "
                daemon /usr/local/sbin/исполняемый_файл
                echo
        } 

        stop() {
                echo -n $"Shutting down $KIND services: "
                killproc исполняемый_файл
                echo
        } 

        restart() {
                    echo -n $"Restarting $KIND services: " 
                       killproc исполняемый_файл
                   daemon /usr/local/sbin/исполняемый_файл
                   echo
        } 

        case "$1" in
          start)
                  start
                ;;
          stop)
                  stop
                ;;
          restart)
                  restart
                ;;
          *)
                echo $"Usage: $0 {start|stop|restart}"
                exit 1
        esac
        exit $?


Главное тут в следующем, во первых скрипт должен иметь как минимум 3
возможных ключа запуска, это:  start, stop, restart, поскольку именно
эти основные команды используются для запуска, останова и перезапуска.
Плюс ко всему к этому в самом начале файла пишутся те самые заветные
цифры отвечающие за последовательность запуска:

         # chkconfig: - 98 02


Где 98 это номер в последовательности запуска, а 02 это номер
последовательности останова.

То есть, проще говорят этот скрипт запуститься как 98мым в
последовательности очередей, а будет остановлен 2рым.

Теперь практикум. 

Итак для того чтоб добавить скрипт и добавить его в автозагрузку надо
произвести следующую последовательность действий:

1. Создать исполняемый скрипт по шаблону приведёному выше, заменив
исполняемый_файл именем файла который надо запустить.

2. Разместить исполняемый скрипт в /etc/rc.d/init

3. Выполнить команду chkconfig --add исполняемый_скрипт

4. Выполнить команду setup или servicevonf  (в зависимости от того
работвете вы в графическом режиме или консоле ) и выбрать службу которая
будет носить имя исполняемый_скрипт.

Ну вот наверное и всё, если я ни где не ошибся.

Комментариев нет:

Отправить комментарий