Hogyan lehet a xinetd szolgáltatásokat systemd alapúra átállítani?

A xinetd és a systemd két különböző rendszermenedzsment megoldás, amelyek a Linux rendszereken futó szolgáltatások kezelését teszik lehetővé. Az xinetd egy régebbi megoldás, amely még sok régi Linux disztribúcióban használatos, míg a systemd a modern Linux disztribúciók általánosan használt rendszermenedzsment megoldása. Ha egy xinetd alapú rendszerről át kívánunk térni a systemd-re, akkor meg kell csinálnunk a xinetd szolgáltatásainak áttekintését, majd létre kell hoznunk a systemd szolgáltatási fájljait, és végül engedélyezni és futtatni kell azokat. Az alábbiakban részletesen bemutatjuk, hogyan lehet ezt megtenni.

Érintett rendszerek:

  • Red Hat Enterprise Linux (RHEL) 7, 8 és 9 alapúak
  • Minden RHEL-re épülő rendszer: CentOS, Rocky Linux, AlmaLinux

RHEL9 alapú rendszerekből a xinetd már teljesen eltávolításra is került.

Tegyük fel, hogy van egy xinetd szolgáltatásunk az alábbi tartalommal:

{
type = UNLISTED
port = 3662
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/fontosapp
log_on_success =
disable = no
}

A fenti xinetd szolgáltatás a TCP 3662-es porton figyel, és amennyiben kérés jön rá, lefuttatja /usr/bin/app alkalmazást, majd annak kimenetét kiírja a kapcsolódó kliensnek.

Ahhoz, hogy ezt átrakhassuk Systemd alá, két fájlt kell létrehozunk, egy socket fájlt, ami várja a bejövő kéréseket a megadott porton, és egyet magára az alkalmazásra.

A socket fájl jelen esetben a /etc/systemd/system/enalkalmazasom.socket lesz, ennek tartalma pedig:

[Unit]
Description=Sajat Alkalmazas Socket

[Socket]
ListenStream=3662
Accept=yes

[Install]
WantedBy=sockets.target

Majd maga a szolgáltatást a /etc/systemd/system/enalkalmazasom@.service fájl írja le (fontos a kukac a fájlnévben!):

[Unit]
Description=Sajat Alkalmazas Server

[Service]
ExecStart=-/usr/bin/fontosapp
User=root
Group=root
StandardInput=socket

Az ExecStart sorban kerül beállításra az alkalmazás elérési útvonala, az User és Group pedig a felhasználó és csoport akinek a nevében fusson.

Végezetül az aktiváláshoz a socket-et kell engedélyezni és elindítani:

systemctl enable enalkalmazasom.socket
systemctl start enalkalmazasom.socket
systemctl status -l enalkalmazasom.socket