Tartalomjegyzék

< Linux

Démonok

Bevezetés

A démonok a háttérben futó olyan folyamatok, amelyek valamilyen szolgáltatást nyújtanak. Egy démonfolyamat jellemzője, hogy nincs terminálhoz kötve, ezért is mondjuk, hogy a háttérben fut. Angolul demon vagy daemon. A démont szót a MIT-n használták először programozók a MAC projekten belül. Az első démont ebben a projektben nevezték el „Maxwell's demon” néven.

A démonokat manapság szerverszolgáltatások biztosítására használjuk. A szerver szolgáltatások programjainak felesleges a folyamatos terminálkapcsolat, így ezeket démonként futtatjuk.

A démonokat néha mégis szeretnénk vezérelni, például leállítani, elindítani, újraindítani, a konfigurációs fájlokat újratölteni, státusz lekérni stb. Ezeket egy külön erre a célra létrehozott script segítségével tudjuk megtenni.

Démonok megtekintése

Nézzük meg milyen démonok futnak a háttérben.

ps ax

A kimenetben a TTY oszlopban, ha kérdőjelet látunk egy folyamatnál, akkor az adott folyamat nincs teletájphoz kötve, vagyis nincs interaktív felülete amelyen keresztül vezérelhetjük, akkor az egy démon.

A ps ax kimenetéből részlet:

  PID TTY      STAT   TIME COMMAND
...
 1684 ?        Ss     0:00 /usr/sbin/apache2 -k start
 1704 ?        S      0:00 /usr/sbin/apache2 -k start
 1705 ?        S      0:00 /usr/sbin/apache2 -k start
...

A részletben az apache webszerver három példányát látjuk futni démonként. A STAT sorban a démonról informál minket. A Ss azt jelenti fő vezérlő démon, amely alfolyamatokat indít. A fő vezérlő démonok és gyermekfolyamataik kapcsolatát jól szemlélteti ha a ps ax parancshoz egy f kapcsolót is tesztünk:

ps axf
1862 ?        Ss     0:00 /usr/lib/postfix/master
 1874 ?        S      0:00  \_ pickup -l -t unix -u -c
 1875 ?        S      0:00  \_ qmgr -l -t unix -u
 1876 ?        Ss     0:00 pure-ftpd (SERVER)                                   
 1966 ?        Ss     0:00 /usr/sbin/apache2 -k start
 2103 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2104 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2105 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2106 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2107 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2942 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2950 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2951 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2952 ?        S      0:00  \_ /usr/sbin/apache2 -k start
 2953 ?        S      0:00  \_ /usr/sbin/apache2 -k start

A démonok között van egy, amely elsőként indul, ez az „init”. Minden újabb démont initből származtat a rendszer.

Több féle démon

Attól függetlenül, hogy egy szerverszolgáltatást nyújtó démonnak vannak-e gyermekfolyamatai, a démonokat két módon szokás futtatni:

Standalone

A programot elindítjuk, bekerül a memóriába, és végig ott marad amíg le nem állítjuk.

System V indítási mód

A System V típusú unix rendszerekben futási szintek vannak.

Futási szintek között az init paranccsal lehet váltani. A 1-es futási szintre például a következő paranccsal válthatunk:

init 1

Ezzel a rendszergazda mindenkit kizár a rendszerből.

Az aktuális futási szint:

who -r

Az alapértelmezett futási szint:

/etc/inittab

Az állományban egy ilyen beállítást találunk:

:initdefault:2

Indításuk:

Inetd

A programot egy szuper démon indítja, amelyet inetd-enk hívunk. Az indításhoz be kell jegyeznünk a szerverünket az inetd konfigurációs állományába.

Az inetd csak akkor indítja el a szolgáltatást, ha kérés érkezik.

Ha egy szolgáltatást ritkán használunk, akkor érdemes beállítani.

Inet-ből futó démonok újraindítása

kill -SIGHUP pidszam
killall -HUP prognev

Az Inetd újraindítása

Újraindítás:

kill -1 `cat /var/run/inetd.pid`

Példa a démonokra

Postfix démon

A ps ax kimenetének részlete:

 2165 ?        Ss     0:00 /usr/lib/postfix/master
 2184 ?        S      0:00 pickup -l -t fifo -u -c
 2185 ?        S      0:00 qmgr -l -t fifo -u

A postfix egy levelezőszerver. Alapértelmezetten 3 folyamatot futtat:

Apache

 1369 ?        Ss     0:00 /usr/sbin/apache2 -k start
...
 1439 ?        S      0:00 /usr/sbin/apache2 -k start
 1440 ?        S      0:00 /usr/sbin/apache2 -k start
 1441 ?        S      0:00 /usr/sbin/apache2 -k start
 1442 ?        S      0:00 /usr/sbin/apache2 -k start
 1443 ?        S      0:00 /usr/sbin/apache2 -k start

Az apache webszerver. Van egy elsődleges szál, amely körülbelül 5 gyermekfolyamatot futtat, amelyek fogadják a webszerver kéréseit.

Popa3d

 1199 ?        Ss     0:00 /usr/sbin/popa3d -D

A pope3d egy POP3 szerver.

atd démon

 1320 ?        Ss     0:00 /usr/sbin/atd

Parancsok időzített végrehajtását felügyeli.

SSH démon

 2281 ?        Ss     0:00 /usr/sbin/sshd

Pure-FTPd

 2230 ?        Ss     0:00 pure-ftpd (SERVER)

Samba

 2255 ?        Ss     0:00 /usr/sbin/nmbd -D
 2266 ?        Ss     0:00 /usr/sbin/smbd -D
 2276 ?        S      0:00 /usr/sbin/smbd -D

Bind

1348 ?        Ssl    0:00 /usr/sbin/named -u bind

cron

 1704 ?        Ss     0:00 /usr/sbin/cron

cups

 1727 ?        Ss     0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf

Az rpcbind

Az rpcbind egy különleges démon. Vannak olyan szerverszolgáltatások – például NFS, NIS, stb. –, amelyeknél nincs tisztázva milyen porton szolgáltatnak. Az rpcbind megkeresi milyen porton szolgáltatnak ezek a démonok.

Az rpcbind az 111 UDP és TCP porton várja a kéréseket.

D-Bus

A D-Bus vagy egyszerűen csak DBus egy szolgáltatás, amely lehetővé teszi több folyamat számára a belső kommunikációt (inter-process communication - IPC), illetve távoli eljáráshívást (remote procedure call - RPC) használatát.

Jelenleg a D-Bus a freedesktop.org projekt része. A D-BUS fejlesztését Havoc Pennington a Red Hat vállalatnál kezdte el.

Eredetileg azért hozták létre, hogy kiváltsák a CORBA-alapú megoldásokat.

Használják: Avahi, XChat, udev, gnome, HAL, pidgin, Skype stb.

A dbus-monitor parancs kiadásával egyszerűen monitorozható a dbus csatorna:

dbus-monitor

A kimenetben ehhez hasonló sorokat láthatunk:

signal time=1547026815.501068 sender=org.freedesktop.DBus -> destination=:1.26 serial=92 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
   string "org.freedesktop.ReserveDevice1.Audio1"

Üzenetküldés parancssorból:

dbus-send [--system | --session | --address=CÍM] <objektumútvonal> <interfézs.tag> [üzenet...]

Típus megadása:

Udev

Az udev egy eszközkezelő. Az udev démon kezeli a /dev könyvtárat, dinamikusan. A könyvtár tartalmát eszközcsomópontnak is hívják.

Az első /dev könyvtár nem volt dinamikus. Minden lehetséges hardvereszközt felsoroltak, amely ilyen formán sok fölösleges helyet foglalt. Dinamikussá a devfs nevű démonnal vált a /dev könyvtár. Így már csak azok az eszközök szerepelnek a /dev könyvtárban, amelyek tényelegesen jelen vannak. Az udev leváltotta a devfst. Az udev lehetővé teszi szabályok meghatározását az egyes eszközök számára.

A devfs-t a 2.3 kerneltől használták. Az udev a 2.6-os kerneltől már a felhasználói térben működik a /dev könyvtár leképezése.

A 2.6-os kernel óta van egy sysfs nevű rendszer a Linuxban. A sysfs alapszintű információkat tartalmaz a csatlakozott információkról, az adatok a /sys könyvtárban tárolódnak. Az udev figyelembe veszi a sysfs információit is, amit összehasonlít a felhasználói szabálybeállításokkal. A felhasználóknak persze nem kötelező szabályokat megadni.

A szabályok lehetővé teszik az eszköznevek lecserélését. A szabályokat a /etc/udev/rules.d könyvtárban kell létrehozni, egy .rules kiterjesztésű fájlban. A szabályok alkalmazása ábécérendben történik. Ha több szabály is van, mindig az elsőként megtalált szabályt alkalmazza az udev.

Több információért érdemes megnézni az udev kézikönyvét:

man udev

Egyéb irodalom:

A hotplug-rendszer

A hotplug-rendszer vezérli az egyes eszközök előkészítését, inicializálását. Figyeli a rendszerbe futás vagy indulás során bekerült új eszközöket. Szorosan együttműködik a sysfs és udev démonnal.

NetworkManager

A network-manager egy hálózatkezelő keretrendszer (démon és felhasználói eszközök).

Telepítés:

apt install network-manager

A NetworkManager igyekszik a hálózati kapcsolatok megtartásáról gondoskodni.

A NetworkManager igyekszik a hálózati konfigurációt automatizálni, megkönnyíteni. Eredetileg asztali számítógépekre szánták, de néhány nem Debian rendszer, szerverre használja.

A NetworkManager részei:

A NetworkManager csak azokat az interfészeket kezeli, amelyek nincsenek megadva a /etc/network/interfaces fájlban.

Fájlok

A telepítés után a következő parancsok állnak rendelkezésre:

A network-manager démon ezen a néven kezelhető:

systemctl stop network-manager
systemctl start network-manager
systemctl restart network-manager

Forrás:

Avahi

A Zero-configuration networking szabad megvalósítása, amely magában foglalja a multicast DNS/DNS-SD felderítő szolgáltatást.

A program közzéteszi és felderíti a helyi hálózat eszközeinek szolgáltatásait. Ilyen szolgáltatások lehetnek a nyomtatás vagy egy másik emberrel való kapcsolat tartás.

Az Avahi, Debian rendszeren az avahi-daemon csomagban található, ha szeretnénk eltávolítani, vagy telepíteni.

Kezelése:

systemctl restart avahi-daemon

Az avahi-daemon mellé szokták telepíteni az avahi-utils csomagot. Az avahi-utils tartalmazza például az avahi-browse parancsot, amellyel a hálózatot tallózhatjuk parancssorból. Például:

avahi-browse -alr

A tűzfalon az 5353 UDP portot kell engedélyezni, ha erre szükség van.

Démonok kezelése

Invoke-rc.d

Indítás:

invoke-rc.d démonnév start

Leállítás:

invoke-rc.d démonnév stop

Újraindítás:

invoke-rc.d démonnév restart

update-rc.d

Rendszerrel induljon:

update-rc.d démonnév defaults

Rendszerrel ne induljon:

update-rc.d démonnév remove

service

service démonnév start
service démonnév stop
service démonnév restart

systemctl

Státusz és szabályozás futási időben:

systemctl status szolgáltatás
systemctl start szolgáltatás
systemctl stop szolgáltatás
systemctl restart szolgáltatás

Szabályozás rendszerindításkor:

systemctl enable szolgáltatás
systemctl disable szolgáltatás

Háttérbe tett folyamatok

Egy program indításakor, ha az indítóparancs után egy „&” karaktert adunk meg, akkor a program automatikusan háttérbe kerül mint egy démon. Persze egy démonnal ellentétben ez továbbra is teletájphoz lesz kötve.

Például:

nano &

Virtuális terminálon:

26119 pts/0    T      0:00 nano

A „pts/0” részből látjuk, hogy egy virtuális terminálból lett a háttérbe téve a nano program.

A következő nano a hármas teletájpról tettük háttérbe:

26222 tty3     T      0:00 nano

A „T” betű a megállított vagy nyomkövetett folyamatokra jellemző (stopped vagy traced).

Ha olyan programot teszünk a háttérbe, amelynek nincs interaktív felülete az futó állapotba kerül:

yes > /dev/null &
[1] 3977
3977 pts/2    R      0:44 yes

Kezelés menüs felületen

Telepítés:

apt install rcconf

Indítás:

rcconf

Linkek