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.
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.
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:
A programot elindítjuk, bekerül a memóriába, és végig ott marad amíg le nem állítjuk.
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:
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.
kill -SIGHUP pidszam
killall -HUP prognev
Újraindítás:
kill -1 `cat /var/run/inetd.pid`
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:
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.
1199 ? Ss 0:00 /usr/sbin/popa3d -D
A pope3d egy POP3 szerver.
1320 ? Ss 0:00 /usr/sbin/atd
Parancsok időzített végrehajtását felügyeli.
2281 ? Ss 0:00 /usr/sbin/sshd
2230 ? Ss 0:00 pure-ftpd (SERVER)
2255 ? Ss 0:00 /usr/sbin/nmbd -D 2266 ? Ss 0:00 /usr/sbin/smbd -D 2276 ? S 0:00 /usr/sbin/smbd -D
1348 ? Ssl 0:00 /usr/sbin/named -u bind
1704 ? Ss 0:00 /usr/sbin/cron
1727 ? Ss 0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf
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.
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:
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 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.
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.
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:
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.
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
Rendszerrel induljon:
update-rc.d démonnév defaults
Rendszerrel ne induljon:
update-rc.d démonnév remove
service démonnév start service démonnév stop service démonnév restart
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
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
Telepítés:
apt install rcconf
Indítás:
rcconf