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