Как изменить порядок запуска / загрузки служб Linux?

Ответы:

11

Вы можете изменить порядок, переименовав символические ссылки в /etc/rcX.d/, где x будет вашим уровнем выполнения.

Вы увидите кучу файлов, начинающихся с Sxx или Kxx. S-ссылки отслеживаются во время запуска, а K-ссылки анализируются на отключение. Хх здесь представляет порядок.

Но этот порядок установлен по причине, поэтому будьте осторожны при их изменении. Например. ntpd должен запускаться только после инициализации сетевой подсистемы.

тряпье
источник
21

Вместо того, чтобы делать это вручную, как предложено в других ответах, вы также можете изменить скрипт инициализации. Просто добавьте такую ​​строку в шапку:

# chkconfig: 35 90 10

Это даст указание chkconfigдобавить службу к уровням выполнения 3 и 5 с начальной позицией 90 и позицией уничтожения 10.

Кристиан
источник
Эта. Абсолютно это Если вы вручную переименуете символические ссылки, вы получите сюрприз, если кто-то придет и запуститchkconfig off servicename && chkconfig on servicename
batfastad
Работал как шарм. Мне нужно было настроить зависимости между mysqld и контейнером сервлета. Я не мог определить начальную позицию mysqld, поэтому я настроил начальную позицию контейнера сервлета на 99, и она работает просто отлично, сначала запускается mysqld. Благодарю.
jpangamarca
7

Вы хотите прочитать немного о своих уровнях запуска и каталогах rc.d. Внутри каталогов rc.d вы можете найти ссылки S и K, например, S20apache K10apache, который в основном определяет порядок запуска / выключения скриптов.

В эту архитектуру вносятся некоторые изменения, но большинство linux до сих пор ее используют.

CoreDump
источник
Я поражен, что большинство дистрибутивов все еще используют эту систему; лучшие системы, такие как rcorderбыли вокруг некоторое время.
Крис С
Я как бы завидую Солярису svc, но могу обойтись без xml
coredump
Это место. Однако, в зависимости от вашего дистрибутива, у вас могут быть разные способы изменить это значение - так что прочтите конкретную документацию для вашего дистрибутива.
Андрей М.
1
Некоторые дистрибутивы, такие как Ubuntu, используют Upstart ( Википедия ).
Приостановлено до дальнейшего уведомления.
7

Если вы прибыли сюда, скорее всего, у вас есть две службы, одна из которых зависит от другой, но, поскольку они запускаются в неправильном порядке, служба с зависимостью не запускается. Предложения по редактированию символических ссылок являются информативными, с точки зрения иллюстрации того, как выполняется последовательность запуска, и будут работать нормально, пока кто-то не выполнит «chkconfig on» в вашем сервисе, после чего символические ссылки будут воссозданы в том виде, в котором они были изначально. На самом деле, вы хотите решить проблему на уровне сценария инициализации, что на самом деле гораздо менее грязно. Он также будет одинаковым для разных уровней выполнения. Вероятно, вам не нужно добавлять строку "# chkconfig", как предложено в ответе 4, поскольку там, вероятно, уже будет аналогичная строка.

Я буду использовать пример сервера под управлением Openldap (slapd) с базой данных MySQL (mysqld). Конфигурирование этой пары, и почему вы можете захотеть, это совсем другая история.

При загрузке Openldap не запускается, потому что это зависит от MySQL, и последовательность запуска пытается запустить его раньше - slapd имеет позицию 27, а mysqld - позицию 64

Соответствующие символические ссылки в /etc/rc3.d/

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

Я ищу значения, установленные в двух сценариях инициализации:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

Я редактирую строку chkconfig в /etc/rc.d/init.d/slapd, чтобы иметь стартовую позицию выше, чем в /etc/rc.d/init.d/mysqld (я выбрал 85)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

Я делаю "chkconfig slapd on" и перепроверяю символические ссылки

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

Теперь, когда этот сервер запускается, mysqld запускается до slapd, и с миром все в порядке.

Джим Смит
источник