Správa služeb je klíčovou odpovědností systémových administrátorů. Není pochyb o tom, že přechod mezi starší metodou SysV (pomocí service
a chkconfig
příkazy) a novější systemd
-based příkazy (jako je systemctl
) byl kontroverzní. Ve skutečnosti má mnoho systémových administrátorů stále velmi silné pocity tak či onak.
Realita je taková, že mnoho distribucí, včetně Red Hat Enterprise Linux (RHEL), začalo spravovat služby pomocí systemd
. Proto vy i já potřebujeme vědět, jak pracovat s systemctl
příkaz pro správu.
Nejsem ten typ autora/školitele/administrátora, který předpokládá, že každý je pokročilý. S ohledem na to zaměřím tento článek na lidi, kteří potřebují základní a přímočaré vysvětlení toho, jak a kdy používat běžnější systemctl
dílčí příkazy. Na závěr také uvádím skvělý trik pro rychlé zobrazení všech systemctl
dílčí příkazy.
Poznámka:Manuálová stránka systemctl odkazuje na druhé slovo v řetězci jako na "příkaz", což se zdá poněkud matoucí. Budu odkazovat na systemctl
sebe jako příkaz a poté řetězec, který za ním následuje, jako dílčí příkaz . argument je název služby a zaujímá třetí pozici v syntaxi.
Zde je příklad syntaxe:
systemctl subcommand argument
# systemctl status sshd
Ukážu, jak a kdy použít systemctl
. Většina mých příkladů používá běžný sshd
službu.
[ Čtenářům se také líbilo: Jak jsem se naučil přestat se bát a milovat systemd ]
Stav služby
Nejlepší místo, kde začít, je porozumět aktuální funkčnosti služby. Začnu tím nejjednodušším přístupem, použitím status
dílčí příkaz:
# systemctl status sshd

Myšlenka je samozřejmě taková, že jste se právě posadili na neznámý linuxový server a potřebujete znát aktuální stav sshd
servis. Všimněte si, že je poskytnuto mnoho dalších informací, včetně přehledu služby, odkud byla načtena, stavu, ID procesu (PID) a posledních změn.
systemctl status
Příkaz je také užitečný při odstraňování problémů. Když řeším problémy s konfigurací, téměř okamžitě zkontroluji její stav pomocí systemctl
. Proč se obtěžovat s firewally, SELinuxem a konfiguračními soubory, když služba ani neběží?
Nyní tedy víte, jak zkontrolovat stav služeb, jako je SSH. Jak manipulujete s tímto stavem?
Spouštění a zastavování služeb
Když změníte konfigurační soubor pro běžící službu, musíte buď restartovat nebo znovu načíst služba. Pokud tak učiníte, služba znovu přečte soubor, a proto provede změny. Za starých časů jste používali service
příkaz, jako v příkladech níže:
# service sshd restart
Služby pod systemd
jsou spravovány pomocí systemctl
příkaz. Chcete-li restartovat službu SSH pomocí systemctl
, zadejte:
# systemctl restart sshd
Osobně mi tato syntaxe přijde trochu jednodušší. Zní to skoro jako věta:"Systemctl, restartujte prosím sshd."
Syntaxe je podobná, pokud chcete službu zastavit nebo spustit:
# systemctl stop sshd
# systemctl start sshd
Služby, které se odmítají ladně zastavit, lze zabít pomocí systemctl
, také. Chcete-li například zabít sshd
služby, zadejte:
# systemctl kill sshd
Přebíjecí služby jsou trochu jiné. reload
dílčí příkaz pouze způsobí, že služba znovu načte konfigurační soubor, zatímco restart
dílčí příkaz ukončí všechna aktuální připojení a znovu načte konfigurační soubor.
Pokud například zadáte systemctl restart sshd
, všechna aktuální připojení SSH budou zrušena. Pokud jej však znovu načtete, stávající připojení zůstanou zachována. V obou případech je konfigurační soubor znovu načten a veškeré změny jsou implementovány.
Reload způsobuje méně prostojů, ale ne všechny služby to podporují.
start
, stop
, restart,
a reload
dílčí příkazy ovlivňují pouze aktuální běhové prostředí.
Povolení a zakázání služeb
Mnoho administrátorů, kteří jsou v Linuxu noví, je zmateno rozdílem mezi start
/stop
a enable
/disable
. start
jsem již probíral , stop
a restart
v předchozí části. Start
a stop
se používají ke změně aktuálního stavu služby. Pokud se však server restartuje, stav služby se vrátí na výchozí nastavení spouštění. Jinými slovy, pokud zastavím sshd
službu a poté restartujte můj server, proces spouštění prozkoumá konfigurační soubor a buď spustí, nebo nespustí sshd
, v závislosti na tom, co je uvedeno. Pokud službu zastavím a poté restartuji a konfigurační soubor říká, že je třeba službu spustit při spuštění, bude znovu spuštěna.
Dříve jste používali chkconfig
příkaz k definování nastavení spuštění služby pro každou úroveň běhu. Zde je příklad:
# chkconfig --level 35 sshd on
Tento příkaz povolí sshd
ke spuštění v úrovních 3 a 5.
Pomocí systemctl
, konfigurace výchozího nastavení spouštění je dílem enable
a disable
dílčí příkazy. Syntaxe je stejná jako u start
, stop
a restart
dílčí příkazy. Chcete-li například nastavit spuštění SSH při spuštění serveru, zadejte:
# systemctl enable sshd
Podobně pro konfiguraci SSH ne chcete-li spustit během spouštění, zadejte:
# systemctl disable sshd
Konfigurace výchozí konfigurace spouštění pro služby je přímočará, stejně jako spouštění a zastavování služeb. Zdá se však, že existuje určitý zmatek ohledně používání těchto dvou společně.
Používejte start a aktivujte společně
Někomu připadá zvláštní, že povolení služby ji nespustí. Pokud jste si například právě stáhli nový program a chcete jej spustit, abyste mohli otestovat jeho funkčnost a chcete jej nakonfigurovat tak, aby se spouštěl při startu serveru, musíte zadat dva příkazy:
# systemctl start sshd
# systemctl enable sshd

Zakázání služby probíhá stejným způsobem. Zadejte systemctl disable sshd
aby se zabránilo spuštění SSH při spouštění serveru. Pokud však SSH běží v aktuálním běhovém prostředí, zůstane aktivní, i když je zakázáno. Musíte stop
SSH pro vypnutí v aktuálním běhovém prostředí.
Chcete-li například zastavit SSH a zabránit jeho spuštění při spouštění systému, zadejte:
# systemctl stop sshd
# systemctl disable sshd

Nezapomeňte zkontrolovat status
služby kdykoli si nejste jisti zadáním:
# systemctl status sshd
Zda je služba nakonfigurována tak, aby se spouštěla automaticky, můžete zkontrolovat pomocí jiného systemctl
dílčí příkaz:is-enabled
. Chcete-li například zobrazit, zda je povoleno SSH, zadejte:
# systemctl is-enabled sshd

Spousta dílčích příkazů – trik
Pokryl jsem docela dost systemctl
dílčí příkazy, včetně start
, stop
, restart
, enable
, disable
, status
, a další. To je hodně k zapamatování! Zde přichází na řadu doplňování záložek vašeho starého přítele. Vyzkoušejte na svém systému následující techniku:Napište systemctl
a poté přidejte jednu mezeru. Klepněte na Tab dvakrát a bash zobrazí všechny dostupné systemctl
dílčí příkazy! Myslím, že tento trik s doplňováním záložek využívá dostatečně málo systémových administrátorů.

[ Chcete si vyzkoušet své schopnosti správce systému? Proveďte hodnocení dovedností ještě dnes. ]
Sbalit
Jak můžete vidět, správa služeb prostřednictvím systemctl
velení opravdu není tak těžké. Připadá mi jednodušší a logičtější než starší service
a chkconfig
příkazy, osobně. Je také užitečné mít pouze jeden příkaz pro správu služeb namísto dvou.
Zde jsou klíčové body k zapamatování:
- Pomocí start/stop/restart spravujte aktuální runtime.
- Po úpravě konfiguračních souborů použijte start/stop/restart/reload.
- Pomocí aktivace/deaktivace můžete spravovat výchozí akci při spuštění.
- Používejte stav velmi brzy v procesu odstraňování problémů.
Konečně si nemusíte pamatovat všechny dostupné systemctl
dílčí příkazy. Jednoduše zadejte systemctl
a následujte za ním jednou mezerou a poté stiskněte Tab dvakrát. Bashova vestavěná funkce dokončování karet se postará o zbytek!
Systémoví správci se pravidelně přistihují, že manipulují se službami, a doufejme, že jste trochu pohodlnější v tom, kdy použít běžnější systemctl
dílčí příkazy.