Správa linuxových služeb

Z DCEwiki
(přesměrováno z systemd)
Skočit na navigaci Skočit na vyhledávání
Poznámka První aplikace, kterou spustí jádro po zavedení je systémový init (init system)

Historicky linuxové distribuce vyšly z unixového systému System V (zkráceně SysV), který vyvíjela fa. AT&T během 70. a 80. let. Převzaly z něj i způsob spouštění služeb – sysvinit, který je založen na sekvenčním spouštění tzv. init skriptů a úrovních běhu (runlevels).

Vyvíjely se však i jiné unixové systémy. Na univerzitě v kalifornském Berkeley, paralelně vznikal systém BSD (Berlekey Software Distribution), a v jeho rámci byl vyvinut vlastní systém spouštění služeb, rovněž založený na shellových skriptech, který spouští tzv. démony (proto je také symbolem BSD malý ďáblík), které pak dál v průběhu zavádění už spolu komunikují samostatně. Tento systém, zvaný runit převzaly i některé linuxové distribuce, resp. jejich deriváty[1], které vznikly po roce 2004, kdy byl vyšel první veřejný release. Jednou z prvních bylo Gentoo, linuxová distribuce existující od roku 2002. Původně byl u ní veškerý software kompilovaný na míru on-the-fly z veřejných zdrojových kódů[2], takže si mohl během sestavení systému každý uživatel zvolit, jaký init pro svůj systém použije.

Jeho vývojáři pak začali od roku 2007 vyvíjet openrc', což byla původně nadstavba, která měla zastřešit jak sysvinit, tak runit, aby z uživatelského hlediska sjednotili spouštění služeb. Kromě Gentoo používá openrc také Devuan (odvozený od Debianu verze 3.1.0), aj.

S nástupem mobilních aplikací se zcela změnily nároky spojené se spouštěním služeb a bylo potřeba vyvinout nové řešení, které by postupně nahradilo sysvinit, založený na shellových skriptech a systémem binárních aplikací, pracujících s konfiguračnímu soubory. A tak začal v rámci distribuce Red, Hat od roku 2010, tým vývojářů vyvíjet systemd.

V té době již existovala tato wiki a následující stránka vznikla coby stručná referenční příručka základních systémových operací, protože v rámci systémů na DCE je možné narazit na všechny zmíněné init systémy.

Od Debianu verze 12 (vydaného v roce 2023) je výchozím init systémem již systemd:

busctl
Vytahuje informace ze sběrnice D-Bus. Např. parametr --show-machine ukáže také název podadresáře, v adreáři /var/log/journal, kde je uložen žurnál, se kterým pracují služby (services) a nástroj journalctl. Jeho prostřednictvím lze ale také přes sběrnici D-Bus se službami komunikovat.
homectl
?
hostnamectl
Vypisuje informace o systému.
journalctl
Pracuje s logy.
localectl
Nastavení klávesnice a locales.
loginctl
Obsluhuje login.
machinectl
Nástroj pro práci s virtuálními stroji spustšnými přes systemd-nspwan.
networkctl
Síťová rozhraní
portablectl
?
systemctl
Obsluhuje spouštění služeb
timedatectl
Spravuje systémový čas. S atributem status vypíše aktuální konfiguraci.
sysctl
?
udevadm
?

Výpis všech služeb

systemctl

Kde jsou spuštěcí skripty?

Sysv-rc (spouštěcí skripty)

/etc/init.d/
/etc/rc.d/
/etc/rc.<runlevel> - symlinky

Systemd (unity)

/lib/systemd/system/*.service
/etc/systemd/system/*.service

Načtení nové, nebo upravené verze unity..

systemctl daemon-reload

OpenRC na Gentoo (rc skripty)

/etc/init.d/

Spuštění/Zastavení služby

Service

service služba {start|stop}

Systemd

systemctl {start|stop} služba.service

Sysv-rc (stejně i OpenRC na Gentoo)

/etc/init.d/služba {start|stop}

Zjištění stavu služby

Systemd

systemctl status služba.status

Sysv-rc

/etc/init.d/služba status

Service

service služba status

OpenRC na Gentoo

rc-status

Aktivace/Deaktivace služby

Systemd

systemctl {enable|disable} služba.service

Sysv-rc

update-rc.d služba {enable|disable}

Chkconfig

chkconfig služba {on|off}

OpenRC na Gentoo

rc-update {add|del} služba [boot|default|sysinit]

Kontrola, zda-li je služba aktivovaná, nebo ne

Systemd

systemctl is-enabled služba.service; echo $?

0 - služba je akvivována 1 - služba je deaktivovaná

Chkconfig

chkconfig služba

Runlevel

Runlevel určuje soubor s příponou .target Aktuální runlevel vypíše příkaz

systemctl list-units --type=target

Služby pro příslušný runlevel jsou v

/rtc/systemd/system/*.wants/služba.service

Jak změnit runlevel

Alternativa pro..

init <runlevel>

případně..

telinit <runlevel>

0 - poweroff.target (symlink runlevel0.target) - zastavit systém 1 - rescue.target (symlink runlevel1.target) - single user mode 2 - multi-user.target - víceuživatelská úroveň bez grafiky 3 - multi-user.target (symlink runlevel3.target) 4 5 - graphical.target (symlink runlevel5.target) 6 - reboot.target - restart emergency - emergency.target - Bezpečný shell

Při spouštění přes GRUB lze zadat úroveň suštění přes parametr..

systemd.unit=rescue

systém najede stejně, jako by byl zadán parametr

single

Přepnutí na runlevel 3

systemctl isolate multi-user.target

Přepnutí na runlevel 3 (alternativa pro init 5)

systemctl isolate graphical.target

Jak to má Debian?

Jak změnit výchozí runlevel?

Tím, že symlink /etc/systemd/system/default.target povede na jiný target

Vypnutí

poweroff

ale stejně tak lze použít..

halt -p

nebo

init 0

nebo

shutdown -P now

Jaký má mít efekt..

  • start - spustit
  • stop - zastavit
  • restart - nejprve se použije stop a potom start
  • reload - pokud to aplikace podporuje, tak se pouze načte nová verze konfiguračního souboru
  • condrestart - restartuje službu pouze pokud je spuštěná
  • status - vypíše stav zda služba běží, nebo ne

Unity versus init skripty

Systemd načte init skript jako by to byly služby.. Pro jméno služby použije jméno, které poskytuje init skript v parametru Provides V popisu služeb příkazem systemctl se u těchto služeb objeví LSB: a obsah parametru Short-Description

Pokud existuje pro službu unita, tak se LSB služba při startu nepoužije!!!

  1. derivát – odvozenina
  2. V létě 2022 od portage 3.0.31 používá tato distribuce také binární instalační balíky.