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