bukova.info
  • Home
  • Kategorie
  • O webu

>> Home / linux / systemd, administrace

Servis v systemd

∵ Josef Rokos ∴ 2021-02-04 ∞ 3'

Pokud potřebujeme spouštět program jako službu, na distribucích se systemd musíme vytvořit konfigurační soubor s popisem služby. Výhoda je, že lze jako daemona použít i normální binárka, kde se neřeší daemonizace forkem.

Konfigurák vytvoříme v /etc/systmd/system/foo-daemon.service s obsahem:

[Unit]
Description=Foo

[Service]
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target

Až je to hotové, je potřeba přenačíst služby příkazem:

$ sudo systemctl daemon-reload

Pak se dá služba ovládat přes systemctl:

$ sudo systemctl start foo-daemon
$ sudo systemctl stop foo-daemon
$ sudo systemctl restart foo-daemon
$ systemctl status foo-daemon

A vypsat log přes journalctl:

$ journalctl -u foo-daemon

Sekce konfiguráku

[Unit] - popis služby

ParametrPopis
DescriptionKrátký popis služby
DocumentationSeznam URI odkazů na dokumentaci
Before, AfterPořadí startu služeb
RequiresPokud bude aktivována tato služba, aktivují se i služby v tomto seznamu
WantsSlabší závislosti, než v parametru Requires. Pokud se nezdaří start některé služby z tohoto seznamu, služba se přesto nastartuje
ConflictsSeznam konfliktních služeb
 

[Unit] - konfigurace instalace

ParametrPopis
AliasAlias služby
RequiredBy, WantedBySlužba nastartuje, pokud budou nastartovány všechny služby z tohoto seznamu. Viz Requires a Wants v sekci Unit
AlsoSeznam služeb, které budou povoleny nebo zakázány zároveň s touto službou (systemctl enable, systemctl disable)
 

[Service] - konfigurace startu

ParametrPopis
TypeZpůsob spouštění služby
simple (výchozí)- spustit, jak je definováno v parametru ExecStart
forking- služba je spuštěná, až dojde k forku a skončí rodičovský proces
oneshot - podobné jako simple, ale předpokládá se, že proces skončí než se budou startovat následující služby. Lze definovat RemainAfterExit=yes, pak se předpokládá, že je služba aktivní, i když proces už skončil
dbus- podobné jako simple, ale služba se považuje za spuštěnou, až dostane D-Bus jméno
notify- podobné jako simple, ale služba se považuje za spuštěnou, až pošle signál systemd
idle- spuštění služby je odloženo až doběhnou všechny úlohy
ExecStartPříkaz i s argumenty pro spuštění služby.
ExecStopPříkaz pro zastavení služby
ExecReloadPříkaz pro přenačtení konfigurace
RestartPokud je zadán tento parametr, služba je restartována v případě, že se ukončí nebo spadne. Při ukončení přes systemctl stop k restartu nedojde
RemainAfterExitPokud je nastaveno na True, služba je považována za spuštěnou, i když skončí proces
 

Přiklady konfigurace

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
ExecStart=/usr/bin/redis-server /etc/redis.conf --daemonize no
ExecStop=/usr/bin/redis-shutdown
User=redis
Group=redis

[Install]
WantedBy=multi-user.target

Kategorie

  • linux
  • programování

Tagy

  • administrace
  • C++
  • rust
  • systemd

2021 © Josef Rokos | GitHub | Built on Zola