Linux #5 - Daemons i systemd
Wstęp
Dzień dobry, dziś opowiem o tym, jakie to demony grasują w Linuxie. Zapraszam
Co to jest Systemd
Systemd jest najnowszy standardem procesu init.
A co to jest proces init? Proces init jest programem uruchamiającym przestrzeń użytkownika
A przestrzeń użytkownika to… przestrzeń użytkownika, czyli elementy systemu, które pozwalają na naszą interakcję z nim.
Systemd uruchamia kolejno elementy systemu, zgodnie z zależnościami, jakie zostały ustalone w plikach jednostek. Zaczynając odczyt od pliku default.target
i rozwiązuje zależności aż do uruchomienia celu.
Co to są te demony
Demony a właściwie daemony (podobno wymawia się to “dajmony”). Są to wszystkie jednostki, serwisy oraz procesy działające w tle na rzecz działania systemu lub dodają funkcjonalność do innych procesów. Od siebie dodam, że w swojej pracy spotkałem się z określaniem jako daemon każdego procesu chodzącego w tle, wykonującą daną czynność. Niezależnie czy na rzecz systemu, czy użytkownika.
Co to są jednostki
Jednostki są to pliki.
Pliki te są zwykłymi plikami tekstowymi, które zawierają opis serwisu, gniazda(ang. socket), urządzenia, pliku montowania, celu i kilku innych. Opisują one co dany proces, działanie czy operacja wymaga, czym jest, jakie ma zależności, jak postępować w przypadku błędu, czy restartować, czy nie no i oczywiście co ta jednostka w ogólne opisuje.
Typy jednostek.
Poniżej prezentuje typy jednostek żywcem wyciągnięte z man systemd
Angielska nazwa | Polska nazwa | man |
---|---|---|
Service units | Jednostka serwisu | man systemd.service |
Socket units | Jednostka gniazda | man systemd.socket |
Target units | Jednostka celu | man systemd.target |
Device units | Jednostka urządzenia | man systemd.device |
Mount units | Jednostka montowania | man systemd.mount |
Automount units | Jednostka automontowania | man systemd.automount |
Timer units | Jednosta zegarowa | man systemd.timer |
Swap units | Jednostka pamięci swap | man systemd.swap |
Path units | Jednostka ścieżki | man systemd.path |
Slice units | Jednostka grup | man systemd.slice |
Scope units | Jednostka zakresu | man systemd.scope |
Konstrukcja jednostki
Poniżej prezentuję przykład jednostki zaczerpnięty z man systemd.unit
[Unit]
Description=Some HTTP server
After=remote-fs.target sqldb.service
Requires=sqldb.service
AssertPathExists=/srv/webserver
[Service]
Type=notify
ExecStart=/usr/sbin/some-fancy-httpd-server
Nice=5
[Install]
WantedBy=multi-user.target
Sekcja [Unit]
- Description - opis jednostki
- After - po czym nasza jednostka ma zostać uruchomiona
- Requires - czego nasza jednostka wymaga
- AssertPathExists - warunek do spełnienia. W tym przypadku, czy istnieje ścieżka
Sekcja [Service]
- Type - jaki jest to typ serwisu (
notify
oznacza, że proces powiadomi, że wystartował) - ExecStart - ścieżka do programu, który ma zostać uruchomiony
- Nice
Sekcja [Install]
- WantedBy — instrukcja, dla systemd, informująca który cel wymaga tej jednostki
Epilog
Temat systemd, jak i jednostek jest dość rozległy. Dziś zaprezentowałem tylko kawałek. Sam nawet pewnie połowy konstrukcji i kombinacji nie znam, ale się uczę. Jeśli macie jakieś pytania, prośby, czy przemyślenia zapraszam do kontaktu na stronie O mnie.
Życzę miłego dnia i pozdrawiam.
Mateusz Lewicki