Przejdź do głównej zawartości

Linux RHCSA cz.4 - Runlevels - zarządzanie serwisami, uruchomionymi procesami - usługami

W każdym systemie operacyjnym istotną kwestią jest możliwość zarządzania uruchomionymi serwisami i usługami. Od możliwości zarządzania i konfigurowania usług zależy stabilność i niezawodność systemu. Usługi mogą działać nieprawidłowo w wyniku bardzo prostej przyczyny np. nie prawidłowo ustawionego czasu systemowego lub też w wyniku czegoś bardziej złożonego, jak udostępnienie pliku w otoczeniu sieciowym dla użytkowników używających NFS. Wiedza na temat zarządzania usługami jest dużą częścią egzaminu RedHat i jest to również krytyczna z punktu widzenia administratora umiejętność w realnej pracy z środowiskami Linuxowymi. W Linux usługi są również nazywane demonami. Powód dla którego niektóre serwisy nazwano właśnie w ten sposób jest taki, iż na jedną usługę faktycznie składa się wiele innych demonów. Dla przykładu NFS. Zazwyczaj usługa jaką nazwiemy demonem jest serwisem, którego nazwa kończy się na literę "d". Dla przykładu usługa SSH to serwis o nazwie "sshd" lub serwer stron WWW Apache nosi nazwę "httpd".

Zobaczmy jakie różnice w uruchomionych usługach są pomiędzy poszczególnymi poziomami uruchamiania. Zacznijmy od trybu 3 (runlevel 3 - tryb tekstowy) :

# ls /etc/rc.d/rc3.d/ 


Zawartość tego katalogu stanowią linki symboliczne do skryptów w systemie zazwyczaj znajdujących się w # /etc/rc.d/init.d


Jeżeli się przyjrzymy, większość linków ma składnie przypominającą : # [K | S]XXnazwa_usługi. Można sie domyślić, że chodzi tu o "K" czyli "Kill" oraz "S" czyli "Start", a "XX" oznacz numer pomiędzy 01 a 99, włącznie z duplikatami. Czyli są to nazwy usług. Cyfry oznaczają kolejność uruchamiania się usług po przejściu w dany tryb dla przykładu usługi S10network i S55sshd, gdzie logiczne jest, że najpierw musi być sieć, po której następnie można się komunikować przez SSH. Tak samo rzecz się ma z wyłączaniem procesów. Czyli uruchomienie i wyłączenie w kolejności według zależności jednych usług od drugich. Tak więc należy zwracać szczególną uwagę edytując zawartość katalogów runlevel (rc.d), ponieważ jeżeli nie zachowamy kolejności startu lub zatrzymania zależnych od siebie usług może to prowadzić do nieprzewidzianej reakcji systemu lub też wyłączenia się niektórych usług. 

Teraz gdy już wiadomo jakie są różnice pomiędzy serwisami uruchamianymi i wyłączanymi w różnych poziomach uruchamiania możemy zobaczyć jak działa narzędzie zarządzające służące do włączania lub wyłączania wybranych usług dla danego poziomu uruchomienia. Wyobraźmy sobie, że musimy dokonać wpisu w wymienionych poprzednio serwisach czyli S10network i S55sshd dla wszystkich poziomów uruchamiania czyli 2x6 =12 lokalizacji gdzie należy dokonać zmiany. A gdy by tak należało zmienić coś we wszystkich serwisach ? Jak długo by to trwało ? Łatwiej zarządzać usługami we wszystkich poziomach uruchamiania stosując narzędzie chkconfig

Składnia polecenie chkconfig : # chkconfig [opcje] nazwa_serwisu

Opcje chkconfig (Przed atrybutami stawiamy dwa myślniki.) :

  • --  list nazwa_serwisu              - Pokazuje status serwisu we wszystkich poziomach uruchomienia
  • -- add nazwa serwisu               - Dodanie serwisu do zarządzania przez chkconfig 
  • -- del nazwa_serwisu                - Usunięcie serwisu z zarządzania komendą chkconfig
  • -- level numer_poziomu              - Włączenie lub wyłączenie serwisu na danym poziomie uruchamiania
  • nazwa_serwisu on | off | reset   - Włączenie lub wyłączenie serwisu na poziomach 2-5
Zadanie 1
Jaki status na jakim poziomie ma usługa SSH ?

Odp: # chkconfig --list sshd w wyniku otrzymamy :  

sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Otrzymany wynik jest bardzo prosty do interpretacji. Serwis uruchamiany jest w poziomach 2, 3, 4, 5 a zatrzymany jest w poziomach 0, 1 i 6. 

Zadanie 2
W jaki sposób zatrzymać uruchamianie usługi SSH na wszystkich poziomach ?

Odp: # chkconfig sshf off  następnie sprawdzamy jak wygląda status po zmianie chkconfig --list sshd :


sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

Teraz usługa sshd nie uruchomi się na żadnym poziomie. 

Zadanie 3 
Zezwól na uruchomienie usługi na poziomach na jakich była uruchamiana poprzednio. 

Odp: # chkconfig sshd on  i dla sprawdzenia # chkconfig --list sshd :

          sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Zadanie 4 
Wyłącz uruchamianie usługi sshd na poziomie 4

Odp: # chkconfig --level 4 sshd off  i dla sprawdzenia chkconfig --list sshd :

         sshd 0:off 1:off 2:on 3:on 4:off 5:on 6:off


Oprócz stosowania polecenia chkconfig mamy do dyspozycji również narzędzie w formie graficznej, które uruchomione zostaje wydając polecenie ntsysv. Jedyną różnicą pomiędzy narzędziami jest fakt, iż ntsysv udostępnia menu z listą na której mamy możliwość zaznaczania lub odznaczania wybranych serwisów.

# ntsysv - narzędzie po uruchomieniu dotyczy poziomu w jakim zostało wywołane 

# ntsysv -- level 2 - narzędzie dotyczy 2 poziomu uruchomienia 


Z powyższych rozwiązań szybciej operuję się na poleceniu chkconfig jednak mamy wybór i możemy stosować wersję graficzną ntsysv. Na tą chwilę wiemy już jak włączać i wyłączać wybrane serwisy w poszczególnych poziomach uruchamiania. Co jednak zrobić gdy system już wystartował, a zdarzyło się zapomnieć o uruchomieniu wybranego serwisu? Czy trzeba dodać go z chkconfig i ponownie restartować system? Otóż nie ma takiej potrzeby, ponieważ mamy polecenie # service, dzięki któremu możemy uruchamiać, zatrzymywać i sprawdzać status wybranych usług. 

Składnia polecenie service : 
# service ( -- status-all | nazwa_serwisu atrybut [start|stop|restart|status])

Zadanie 1 
Zazwyczaj dobrym pomysłem jest na początek sprawdzenie statusu danego serwisu, sprawdź status serwisu ntpd ? 

Odp: # service ntpd status w wyniku otrzymamy ntpd is stoped 

Zadanie 2 
Jeżeli serwis nie działa uruchom go 

Odp: # service ntpd start wynikiem działania będzie : Starting ntpd                               [OK]
Jeżeli wszystko będzie w porządku zobaczymy OK na końcu linii lub też FAIL jeżeli coś pójdzie źle. 

Zadanie 3 
Zatrzymaj serwis NTPD 

Odp: # service ntpd stop w wyniku : Shutting down ntpd:                                                [OK]


UPSTART NOWE NARZĘDZIE W RHEL6

Jak już wcześniej wspomniano w RHEL6 pojawiło się nowe rozwiązanie zwane "Upstart" które używa "zadań" i "zdarzeń" do uruchamiania różnych usług. Największym problem podczas pracy z Upstart jest fakt, iż nie ma standardowej dokładnej lokalizacji, gdzie przechowywane są pliki konfiguracyjne. Dokładniej rzecz biorąc możesz wyszukać dane zadanie w lokalizacji /etc/init oraz odnaleźć dane zdarzenie w /etc/event.d i nadal istnieją również tradycyjne katalogi SysV Init. Wraz z wydaniem Upstart kilka usług zostało przeniesionych do tego narzędzia np. usługa Syslog odpowiedzialna za logi systemowe. Każde zadanie może wykorzystywać zdarzenia powołujące inne zadania. Najlepiej wyjaśni to przykład: 

# cat control-alt-delete.conf
# control-alt-delete - emergency keypress handling
#
# This task is run whenever the Control-Alt-Delete key combination is
# pressed. Usually used to shut down the machine.
start on control-alt-delete
exec /sbin/shutdown -r now “Control-Alt-Delete pressed”


Widać skąd przychodzi wejście dla tego zadania czyli naciśnięcie klafiszy Ctrl+Alt+Delete. Exec definiuje polecenie jakie zostanie wtedy wykonane. Oprócz zadań zobaczmy również definicje zdarzenia: 



# cat ck-log-system-start
# Upstart event
# ck-log-system-start - write system start to log
#


start on stopped rcS
console output
exec /usr/sbin/ck-log-system-start


To wydażenie tworzy plik loga zapisując moment, gdy system zostanie uruchomiony prawidłowo. W tym momencie można się zastanawiać, w jaki sposób wywołać jakieś zadanie lub zdarzenie? Do tego używamy polecenia podobnego do service : initctl  


Składnia polecenie initctl: # initctl [polecenie] 

Opcje dla initctl :

  • start         - Uruchomienie zadania
  • stop          - Zatrzymanie zadania
  • restart      - Restart zadania
  • reload      - Wysłanie sygnału HUP do zadania
  • status       - Zapytanie o status zadania
  • lists           - lista znanych zadań
  • emit          - wywołanie zadania
Stosując polecenie initclt można zobaczyć jakie dokładnie zadania są wykonywane przez nasz system

# initclt list 

W raz z kolejnymi wydaniami systemów coraz więcej serwisów trafia pod obsługę nowego narzędzia jakim jest Upstart.

Jeżeli czytacie ten kurs po kolei, w tym momencie Wasza wiedza powinna być poszerzona o zagadnienia dotyczące botloadera GRUB, usługi systemowe wraz z ich zarządzaniem. Tematy te wielokrotnie powtarzają się w Red Hat Prep Guide, jest to wyraźny znak, iż jest to wiedza na której należy się skupić. 

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości