Jak zmienić kolejność uruchamiania / uruchamiania usług Linux?

Odpowiedzi:

11

Możesz zmienić kolejność, zmieniając nazwy dowiązań symbolicznych w /etc/rcX.d/, gdzie x będzie poziomem uruchomienia.

Zobaczysz kilka plików zaczynających się od Sxx lub Kxx. Łącza S są śledzone podczas uruchamiania, podczas gdy łącza K są analizowane pod kątem zamknięcia. Tutaj xx oznacza kolejność.

Ale ta kolejność jest ustalona z jakiegoś powodu, więc bądź ostrożny podczas ich zmiany. ntpd powinien uruchomić się dopiero po zainicjowaniu podsystemu sieciowego.

łachmany
źródło
21

Zamiast robić to ręcznie, jak sugerowano w innych odpowiedziach, możesz także zmienić skrypt inicjujący. Po prostu dodaj taką linię do nagłówka:

# chkconfig: 35 90 10

Spowoduje to chkconfigdodanie usługi do poziomów uruchamiania 3 i 5, z pozycją początkową 90 i pozycją zabicia 10.

chrześcijanin
źródło
To. Absolutnie to. Jeśli ręcznie zmienisz nazwę dowiązań symbolicznych, otrzymasz niespodziankę, jeśli ktoś przyjdzie i chkconfig off servicename && chkconfig on servicename
ucieknie
Działa jak urok. Musiałem skonfigurować zależności między mysqld a kontenerem serwletu. Nie mogłem ustalić pozycji początkowej mysqld, więc skonfigurowałem pozycję początkową kontenera serwletu na 99 i działa dobrze, mysqld zaczyna się jako pierwszy. Dzięki.
jpangamarca
7

Chcesz poczytać trochę o swoich poziomach pracy i katalogach rc.d. W katalogach rc.d można znaleźć łącza S i K, takie jak S20apache K10apache, czyli w zasadzie to, co nakazuje uruchamianie / zamykanie skryptów.

Wprowadzono pewne zmiany w tej architekturze, ale większość linuksów nadal z niej korzysta.

rdzeń rdzeniowy
źródło
Dziwi mnie, że większość dystrybucji nadal korzysta z tego systemu; lepsze systemy takie rcordersą już od jakiegoś czasu.
Chris S
Ja trochę zazdroszczę solaris svc, ale mógłbym obejść się bez XML-a
coredump
To jest na miejscu. Jednak w zależności od dystrybucji możesz mieć różne sposoby zmiany tej wartości - przeczytaj więc dokumentację dla swojej dystrybucji.
Andrew M.,
1
Niektóre dystrybucje, takie jak Ubuntu, używają Upstart ( Wikipedia ).
Wstrzymano do odwołania.
7

Jeśli przyjechałeś tutaj, są szanse, że masz dwie usługi, w których jedna zależy od drugiej, ale ponieważ zaczynają się w niewłaściwej kolejności, ta z zależnością nie uruchamia się. Sugestie dotyczące edytowania dowiązań symbolicznych mają charakter informacyjny, jeśli chodzi o zilustrowanie przebiegu sekwencji startowej i działałyby w porządku, dopóki ktoś nie wykonałby „chkconfig” w Twojej usłudze, w którym to momencie dowiązania symboliczne zostałyby ponownie utworzone tak, jak były pierwotnie. Naprawdę, chcesz poradzić sobie z tym problemem na poziomie skryptu inicjującego, co i tak jest o wiele mniej skomplikowane. Będzie również spójny na różnych poziomach działania. Prawdopodobnie nie będziesz musiał dodawać wiersza „# chkconfig”, jak sugerowano w odpowiedzi 4, ponieważ prawdopodobnie już tam będzie podobna linia.

Wykorzystam przykład serwera z uruchomionym Openldap (slapd) z backendem bazy danych MySQL (mysqld). Konfiguracja tej pary i dlaczego możesz chcieć, to zupełnie inna historia.

Podczas uruchamiania Openldap nie uruchamia się, ponieważ zależy od MySQL, a sekwencja uruchamiania próbuje go uruchomić przed nim - slapd ma pozycję 27, a mysqld ma pozycję 64

Odpowiednie dowiązania symboliczne w /etc/rc3.d/ to

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

Szukam wartości ustawionych w dwóch skryptach inicjujących:

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

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

Edytuję linię chkconfig w /etc/rc.d/init.d/slapd, aby mieć pozycję początkową wyższą niż ta w /etc/rc.d/init.d/mysqld (wybrałem 85)

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

Robię „chkconfig slapd on” i ponownie sprawdzam dowiązania symboliczne

[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

Teraz, kiedy ten serwer się uruchamia, mysqld uruchamia się przed slapd i wszystko jest w porządku ze światem.

Jim Smyth
źródło