Автозапуск программы как демона
Добавлено: 27 апр 2023, 21:26
Наверное ни для кого не секрет, что скрипты запускаемых служб в 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 (в зависимости от того
работаете вы в графическом режиме или консоли) и выбрать службу, которая
будет носить имя исполняемый_скрипт.
располагаются в /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 (в зависимости от того
работаете вы в графическом режиме или консоли) и выбрать службу, которая
будет носить имя исполняемый_скрипт.