- Alt linux перезапустить службу
- Создание сервиса systemd
- Конфиг службы
- Простой вариант для пробы
- Вариант с запуском службы программы
- Ключи времени
- Параметры перезапуска службы
- Список целей
- Создание сервиса systemd
- Конфиг службы
- Простой вариант для пробы
- Вариант с запуском службы программы
- Ключи времени
- Параметры перезапуска службы
- Список целей
Alt linux перезапустить службу
Cтартовые сценарии осуществляют запуск и останов системных служб — программ, предоставляющих различные “ услуги ” (сервисы) пользователям системы. В качестве примера системных служб можно привести syslog — службу инициализации системного журнала или network — службу инициализации сети.
Для управления списком служб, которые должны запускаться при старте системы (а точнее — при её загрузке на том или ином уровне выполненения), используется команда chkconfig вида chkconfig имя_службы команда . Например, командой chkconfig sendmail on запускается почтовый сервер, осуществляющий отправление и достаку почты по протоколу SMTP, Более подробно работа команды chkconfig рассмотрена ниже.
Для запуска, перезапуска или останова служб в процессе работы применяется утилита service . Её общий вид следующий: service имя_службы . Например, если понадобилось перезапустить службу системного журнала, это можно сделать следующим образом:
# service syslogd restart Stopping system logger service: [ DONE ] Starting system logger service: [ DONE ]
Обратите внимание, что для управления службами необходимы права суперпользователя.
Управление системными службами при помощи утилит chkconfig и service — наиболее простой в повседневной работе вариант. Далее речь пойдет о более сложном и универсальном способе — работе со стартовыми сценариями.
Стартовые сценарии ALT Linux устроены примерно так же, как в RedHat Linux , по простой “ .d ”-схеме. Суть её в следующем. Любое атомарное действие по изменению способностей системы — запуск и останов определённой службы, автоматическое изменение или сохранение настроек и т. п. — оформляется в виде командного сценария в каталоге /etc/rc.d/init.d . К такому сценарию предъявляются определённые требования: как минимум, он должен распознавать в качестве первого параметра слова start и stop . Будучи запущен с параметром start , этот сценарий выполняет действия по запуску службы или активации настроек, а с параметром stop он останавливает службу или записывает активные настройки в файл.
Когда система загружается, процесс init выполняет сначала сценарий /etc/rc.d/rc.sysinit , а затем — /etc/rc.d/rc номер , где номер соответствует уровню выполнения (профилю использования системы, обычно он равен 3, “ многопользовательский с сетью ” или 5, “ многопользовательский с сетью и графической средой ”). Всё это сводится к выполнению в лексикографическом (грубо говоря, алфавитном) порядке всех сценариев из каталога /etc/rc.d/rc номер .d/ , начинающихся на букву K (Kill) с параметром stop и всех сценариев, начинающихся на S (Start) с параметром start . Принято после буквы K или S вставлять двузначное число, а затем — имя службы, а сами файлы в rc номер .d/ делать символьными ссылками на сценарии в /etc/rc.d/init.d/ (точнее, на файлы в ../init.d/ , так достигается совместимость с системами, в которых init.d и rc*.d лежат не в /etc/rc.d , а в /etc или вообще где угодно). Останов системы рассматривается как переход на уровень выполнения 0 , а перезагрузка — на уровень выполнения 6 , так что имена файлов в каталогах rc0.d и rc6.d начинаются сплошь на K , кроме S00killall , S01reboot или S01halt . Таким образом достигается строгий порядок выполнения действий без создания единого стартового сценария (как это делалось, например, в ранних версиях BSD).
В ALT Linux эти рекомендации носят обязательный характер, потому что размещение сценариев в каталогах rc*.d происходит не вручную, а автоматически. Для этого в начало каждого сценария вносятся комментарии особого вида: # description: , после которого следует краткое описание, и chkconfig: , после которого следует три числа. Первое — набор цифр (без пробелов), соответствующих уровням выполнения, на которых сценарий будет использоваться (т. е. создаваться ссылка, начинающаяся на S ). Второе — двузначное число, которое будет добавляться в имя ссылки после S , а третье — двузначное число, которое будет добавляться в имя ссылки после K .
#! /bin/sh # # crond Start/Stop the cron clock daemon. # # chkconfig: 2345 40 60 # description: cron is a standard UNIX program that runs user-specified \ # programs at periodic scheduled times. vixie cron adds a \ # number of features to the basic UNIX cron, including better \ # security and more powerful configuration options. # processname: crond # config: /etc/crontab # pidfile: /var/run/crond.pid
Команда chkconfig имя_службы on автоматически создаёт ссылки типа S для всех уровней выполнения, указанных в первом числе поля chkconfig: , а для остальных уровней выполнения — ссылки типа K . Команда chkconfig имя_службы off заводит во всех каталогах rc*.d ссылки типа K . Стоит заметить, что другие поля похожего формата остались в стартовых сценариях от других, более сложных систем автоматической загрузки и в ALT Linux не используются. В приведённом примере сценарий netfs (монтирование сетевых файловых систем) запускается на уровнях 3, 4, и 5, причём при запуске служба имеет номер 25, а при останове — 75.
$ grep chkconfig: /etc/rc.d/init.d/netfs # chkconfig: 345 25 75 $ chkconfig —list netfs netfs 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл $ ls -l /etc/rc.d/rc*.d/*netfs* lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc0.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc1.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc2.d/K75netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc3.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc4.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc5.d/S25netfs -> ../init.d/netfs lrwxrwxrwx 1 root root 15 Авг 15 19:06 /etc/rc.d/rc6.d/K75netfs -> ../init.d/netfs
Кроме того, правила оформления стартовых сценариев ALT Linux рекомендуют, чтобы они распознавали ещё один параметр — status , позволяющий определить состояние службы (по крайней мере, узнать, запущена ли она или нет). Корректный стартовый сценарий всё равно должен уметь это определять, иначе попытка запуска K -сценария при остановленной службе будет выдавать сообщение об ошибке, даже если спецификой службы это предусмотрено. Например, супердемон xinetd при запуске проверяет, зарегистрирована ли в нём хотя бы одна сетевая служба, а не найдя таковых, завершает работу. Для отражения того, что запуск службы прошёл успешно, в ALT Linux заведён специальный каталог, /var/lock/subsys , в котором стартовые сценарии создают т. н. lock-файлы. Если lock-файл службы есть в этом каталоге, значит, она запущена, и K -сценарий действительно должен её останавливать. Поэтому рекомендуется запускать и останавливать системные службы не напрямую, запуском демонов, и даже не путём запуска сценария из init.d , а с помощью утилиты service . Впрочем, вызов service имя_службы команда эквивалентен /etc/rc.d/init.d/ имя_службы команда , просто командная строка выходит короче.
При написании стартового сценария рекомендуется пользоваться файлом /etc/init.d/functions , в котором определены основные функции для работы с /var/lock/subsys и унифицированным выводом сообщений на экран. Обратите внимание, что по соображениям совместимости обычно используется имя каталога /etc/init.d , а не /etc/rc.d/init.d , при этом первое имя — всего лишь символьная ссылка на второе.
Создание сервиса systemd
Если Вам необходимо создать автозапуск приложения на уровне systemd/сделать службу (сервис), вы можете выполнить следующие действия:
Конфиг службы
Простой вариант для пробы
Чтобы понять, что из себя представляет Unit в Systemd попробуем создать службу, которая запускает программу n (/usr/bin/n).
[Unit] Description=Start-n After=default.target [Service] ExecStart=/usr/bin/n [Install] WantedBy=default.target
В данном варианте у нас при загрузке запутится и будет работать указанная программа.
Вариант с запуском службы программы
Вводим в текстовом редакторе:
[Unit] # описание Description=X11VNC Server # здесь используется ключи времени с указанием цели или другой службы After=prefdm.service [Service] # от какого пользователя запускать службу, не обязательно User=root # перезапуск службы, не обязательно Restart=on-failure #выполняемая команда ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -usepw -noxfixes -shared -forever -rfbport 5900 -rfbauth /root/.vnc/passwd [Install] # здесь используется ключи времени с указанием цели или другой службы WantedBy=graphical.target
# systemctl enable x11vncsrv
Ключи времени
- Wants, Requires, Before, After.
- (Ожидает, Требует, Перед, После)
- (Ожидается цель/служба, Требуется цель/служба)
Параметры перезапуска службы
- no — никогда
- always — всегда
- on-success — успешно
- on-failure — не успешно
- on-abnormal — не нормальный
- on-abort — при прирывании
- on-watchdog — Сторожевой таймер (Watchdog timer) — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы.
Список целей
- default.target — модуль по-умолчанию
- graphical.target — запуск графической подсистемы
- multi-user.target — запуск консоли
- network-online.target — ожидание подключенной сети (используется в Wants)
- network.target — сеть
- network-pre.target — запуск до настройки сети (используется в Requires)
- boot-complete.target — успешная загрузка [i]
Создание сервиса systemd
Если Вам необходимо создать автозапуск приложения на уровне systemd/сделать службу (сервис), вы можете выполнить следующие действия:
Конфиг службы
Простой вариант для пробы
Чтобы понять, что из себя представляет Unit в Systemd попробуем создать службу, которая запускает программу n (/usr/bin/n).
[Unit] Description=Start-n After=default.target [Service] ExecStart=/usr/bin/n [Install] WantedBy=default.target
В данном варианте у нас при загрузке запутится и будет работать указанная программа.
Вариант с запуском службы программы
Вводим в текстовом редакторе:
[Unit] # описание Description=X11VNC Server # здесь используется ключи времени с указанием цели или другой службы After=prefdm.service [Service] # от какого пользователя запускать службу, не обязательно User=root # перезапуск службы, не обязательно Restart=on-failure #выполняемая команда ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -usepw -noxfixes -shared -forever -rfbport 5900 -rfbauth /root/.vnc/passwd [Install] # здесь используется ключи времени с указанием цели или другой службы WantedBy=graphical.target
# systemctl enable x11vncsrv
Ключи времени
- Wants, Requires, Before, After.
- (Ожидает, Требует, Перед, После)
- (Ожидается цель/служба, Требуется цель/служба)
Параметры перезапуска службы
- no — никогда
- always — всегда
- on-success — успешно
- on-failure — не успешно
- on-abnormal — не нормальный
- on-abort — при прирывании
- on-watchdog — Сторожевой таймер (Watchdog timer) — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы.
Список целей
- default.target — модуль по-умолчанию
- graphical.target — запуск графической подсистемы
- multi-user.target — запуск консоли
- network-online.target — ожидание подключенной сети (используется в Wants)
- network.target — сеть
- network-pre.target — запуск до настройки сети (используется в Requires)
- boot-complete.target — успешная загрузка [i]