init.d Скрипты автозапуска при включении, выключении системы.
Лига сисадминовСкрипты запускаемых служб в Linux располагаются в /etc/init.d
Для того, чтобы скрипт запускался автоматически во время запуска системы, надо создать символическую ссылку на скрипт и разместить её в каталоге /etc/rc.d/rcN.d, где N уровень выполнения скрипта.
Уровень 0
остановка системы (halt) - работа системы должна быть прекращена.
Уровень 1
однопользовательский режим работы - консоль восстановления.
Уровень 2
многопользовательский режим - пользователи могут работать на разных терминалах.
Уровень 3
многопользовательский сетевой режим - осуществляется настройка сети и запускаются сетевые службы.
Уровень 4
практически не используется.
Уровень 5
запуск графической подсистемы X11 - вход в систему осуществляется уже в графическом режиме.
Уровень 6
перезагрузка системы - останавливаются все запущенные программы и производится перезагрузка.
Чаще всего во время загрузки системы используются уровни загрузки 3 или 5.
Имя ссылки в каталоге /etc/rc.d/rcN.d имеет особый смысл, например: если сыылки /etc/rc.d/rcN.d/@K99cpu_t и /etc/rc.d/rcN.d/@S00cpu_t указывают на один и тот же файл /etc/init.d/cpu_t, то скрипт @K99cpu_t будет выполнять в cpu_t блок кода, соответствующий останову системы, а скрипт @S00cpu_t будет выполнять в cpu_t блок кода, соответствующий старту системы, Две цифры в начале имени символической ссылки определяют порядок запуска скриптов в каталоге /etc/rc.d/rcN.d.
Cкрипт запуска должен иметь специальный формат, например такой:
#!/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 (в зависимости от того работаете вы в графическом режиме или консоли) и выбрать службу, которая будет носить имя исполняемый_скрипт.
Выполнение скрипта при включении/отключении сети
Есть директория /etc/network/ с поддиректориями if-down.d, if-pre-up.d, if-post-down.d, if-up.d. Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.
Другой способ — указать в файле /etc/network/interfaces одну из следующих директив: up, pre-up, post-up, down, pre-down, post-down. Например, строка
post-up /path/to/script.sh
после включения сети выполнит скрипт script.sh. Подробнее можно почитать в man interfaces.
В любом случае на скрипт должны быть установлены права, разрешающие выполнение, иначе он не сможет запуститься.