Služby, služby, služby. Služba je velkou součástí výpočetní techniky. Čtete tento článek o službě. Na vašem počítači jsou spuštěny služby. Internet je jimi plný.
O systemctl
V Linuxu je standardní způsob spouštění a správy služeb pomocí nástroje systemd a příkazu systemctl
. Jeho použití je poměrně jednoduché:stačí znát název služby, kterou chcete spravovat, a poté můžete pomocí tohoto příkazu službu spustit nebo zastavit, zkontrolovat její stav nebo provádět další funkce:
# systemctl start httpd
# systemctl stop httpd
# systemctl stav httpd
Soubory jednotek
Služba je definována v souboru nazývaném soubor jednotek. Obvykle jsou umístěny v adresáři /usr/lib/systemd/system
. Zde je ukázkový seznam:
auditd.service multi-User.Target Sys-Kernel-Debug.mount
[email protected] multi-User.target.wants Sys-Kernel -Tracing.mount
Basic.target NetworkManager-dispatcher.Service syslog.socket
Basic.Target.Wants NetworkManager.Service syslog.target.wants
blk-evailovability.Service-wait-online .service
Někdy potřebujete spustit více než jednu instanci služby na jednom hostiteli. Pokud například spravujete weby pro několik klientů, bezpečnostní předpisy vyžadují, aby každý klient měl svou vlastní instanci. To znamená, že pro každou z nich musíte spustit novou službu Apache HTTP, ale mít mnoho služeb může být obtížné spravovat. Pokud máte 10 různých zákazníků, museli byste pro jejich správu vytvořit 10 samostatných souborů jednotek. Naštěstí existuje lepší způsob, jak zpracovat více instancí služby.
Symbol @
Všimněte si, že některé soubory jednotek mají ve svém názvu symbol @. Tento symbol má zajímavý význam. Ve skutečnosti si po instalaci Apache HTTP Serveru můžete všimnout několika souborů servisních jednotek, včetně jednoho, který má ve svém názvu symbol @ — [email protected]
.
Ukážu vám, jak to může trochu usnadnit život správce systému, na příkladu Apache HTTP Server:
# dnf -y nainstalovat httpd
# cd /usr/lib/systemd/system
# ls -d http*
httpd.service [email protected] httpd. service.d httpd.socket httpd.socket.d
Symbol @ označuje, že bude provedena náhrada. Systemd převezme vše, co za ním napíšete, a nahradí proměnnou %i
uvnitř souboru servisní jednotky. Proměnnou lze vidět v tomto úryvku z [email protected]
soubor:
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:[email protected](8)
[Služba]
Typ=notify
Prostředí=LANG=C
Prostředí=HTTPD_INSTANCE=%i
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var /lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -POREGROUND - f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf
Všimněte si, že výchozí soubor jednotky httpd, httpd.service
, nemá ve svém názvu symbol @ a vypadá jinak. Používá se pro jednu základní výchozí instanci HTTP serveru Apache.
Spustit více instancí
Více o sysadmins
- Povolit blog Sysadmin
- Automatizovaný podnik:průvodce řízením IT pomocí automatizace
- eKniha:Ansible Automation for SysAdmins
- Příběhy z terénu:Průvodce správcem systému pro automatizaci IT
- eKniha:Průvodce Kubernetes pro SRE a správce systému
- Nejnovější články správce systému
Chcete-li spustit více instancí pomocí tohoto speciálního souboru jednotky, každá potřebuje jedinečný název. Předpokládejme, že máte dva klienty, The Little Bank a The Big Bank. Pojmenujte příklady littlebank a bigbank. Chcete-li jej spravovat, stačí připojit jeho název za symbol @. Spusťte každou instanci příslušným příkazem:
- littlebank:
systemctl start httpd@littlebank
- bigbank:
systemctl start httpd@bigbank
Mějte na paměti, že většina služeb potřebuje určité konfigurace, aby se zabránilo konfliktům mezi různými instancemi. Nebudu je zde pokrývat všechny, ale Apache potřebuje několik věcí, včetně jedinečných čísel portů pro naslouchání, souborů PID a kořenů dokumentů.
Ukážu to pokusem spustit instanci littlebank. Očekávám, že selže, ale poskytne užitečnou stavovou zprávu:
# systemctl start httpd@littlebank
# systemctl status httpd@littlebank
● [email protected] – HTTP server Apache
Načteno:načteno (/usr/lib /systemd/system/[email protected]; zakázáno; předvolba dodavatele:zakázána)
Aktivní:selhalo (Výsledek:výstupní kód) od út 2020-11-10 11:41:20 EST; Před 1 min 58 s
Dokumenty:muž:[email protected](8)
Proces:2205 ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-littlebank (kód=ukončeno, stav =0/ÚSPĚCH)
Proces:2207 ExecStartPre=/bin/chown root.apache /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
Proces:2208 ExecStartPre=/ bin/mkdir -m 700 -p /var/lib/httpd/instance-littlebank (code=exited, status=0/USCCESS)
Proces:2209 ExecStartPre=/bin/chown apache.apache /var/lib/ httpd/instance-littlebank (code=exited, status=0/SUCCESS)
Proces:2210 ExecStart=/usr/sbin/httpd $OPTIONS -DOREGROUND -f conf/littlebank.conf (code=exited, status=1 /FAILURE)
Hlavní PID:2210 (kód=ukončeno, stav=1/FAILURE)
CPU:26 ms
10. listopadu 11:41:20 localhost.localdomain systemd[1 ]:Spouštění serveru HTTP Apache...
10. listopadu 11:41:20 localhost.localdomain httpd[2210]:httpd:Nelze otevřít konfigurační soubor /etc/httpd/conf/littlebank.conf>
10. listopadu 11:41:20 l ocalhost.localdomain systemd[1]:[email protected]:Hlavní proces ukončen, kód=ukončen, stav=1/FAIL>
10. listopadu 11:41:20 localhost.localdomain systemd[1]:httpd@littlebank .service:Selhalo s výsledkem 'exit-code'.
10. listopadu 11:41:20 localhost.localdomain systemd[1]:Nepodařilo se spustit server HTTP Apache.
Můžete vidět, že systemd správně nahradí název instance místo %i
proměnná v souboru jednotek. Apache se však nespustí, protože nemohl otevřít konfigurační soubor. Nyní tedy nastavím instance tak, aby zahrnovaly vytváření potřebných konfiguračních souborů (littlebank.conf
a bigbank.conf
) v /etc/httpd/conf/
:
# ls /etc/httpd/conf
bigbank.conf httpd.conf malá banka.conf
Nyní můžete spravovat každou instanci pomocí systemctl
. Problém start
a status
příkazy každému. Výstup jsem zkrátil na nejdůležitější detaily:
# systemctl start httpd@bigbank
# systemctl start httpd@littlebank
# systemctl status httpd@bigbank
● [email protected] – HTTP server Apache
Načteno:načteno (/usr/lib/systemd/system/[email protected]; zakázáno; přednastaveno dodavatelem:zakázáno)
Aktivní:aktivní (běží) od Út 2020-11-10 12:26:06 EST; před 56 minutami
# stav systemctl httpd@littlebank
● [email protected] – HTTP server Apache
Načteno:načteno (/usr/lib/systemd/system/httpd@ .service; zakázáno; přednastaveno dodavatelem:zakázáno)
Aktivní:aktivní (běží) od Út 2020-11-10 12:25:58 EST; před 55 minutami
Zde je procesní pohled na tyto případy. Existuje více než jeden, protože Apache rozvětvuje procesy serveru, což normálně dělá:
# pgrep -a httpd
2834 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2835 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2836 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
3061 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3062 /usr/sbin/httpd - DFOREGROUND -f conf/bigbank.conf
3064 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
Použijte to
Tato malá funkce systemd je velmi užitečná, když potřebujete mnoho instancí služby. Doufám, že jej budete moci dobře využít ve své práci.