Nemyslím si, že aktivace systemd socketu je výrazně lepší než xinetd
aktivace, pokud je posuzována izolovaně; druhý je také stabilní a existuje již déle. Aktivace soketu je opravdu zajímavá pro oddělení služeb:umožňuje paralelní spouštění služeb, i když potřebují komunikovat, a umožňuje nezávislé restartování služeb.
Pokud máte službu, která podporuje xinetd
-style aktivace, lze ji použít s aktivací socketu:a .socket
popis s Accept=true
se bude chovat stejně jako xinetd
. Budete také potřebovat .service
soubor popisující službu. Plné výhody aktivace systemd socketu vyžadují podporu v démonovi poskytujícím službu. Viz blogový příspěvek na toto téma.
Moje rada bývá „pokud to není rozbité, neopravujte to“, ale pokud chcete převést xinetd
služba založená na systemd je určitě proveditelná.
Můžete použít buď xinetd
nebo systemd
pro aktivaci zásuvky budou fungovat obě. Osobně shledávám xinetd
snadnější použití, protože vše je v jednom souboru, ale také použili systemd
protože je flexibilnější, zejména s nasloucháním na více adresách a předáváním soketů do soketů UNIX a nejen do soketů IP.
Zde jsem jako příklad použil k předání TCP spojení do soketu souboru MySQL:
/etc/systemd/system/mysql-proxy.service
[Unit]
Description=MySql Proxy Service
Requires=mysql-proxy.socket
[Service]
Environment=MYSQL_PROXY_TARGET=/var/run/mysql/mysql.sock
EnvironmentFile=-/etc/sysconfig/mysql-proxy
ExecStart=/usr/lib/systemd/systemd-socket-proxyd ${MYSQL_PROXY_TARGET}
/etc/systemd/system/mysql-proxy.socket
[Unit]
Description=MySql Proxy Socket
[Socket]
ListenStream=192.168.1.1:3306
ListenStream=192.168.2.1:3306
NoDelay=true
FreeBind=true
[Install]
WantedBy=sockets.target
Tradiční přeposílání potřebuje Accept=true
, systemd
vědomé procesy by měly zpracovávat více připojení v jednom procesu nebo podle potřeby rozvětvovat další procesy.