Non credo che l'attivazione del socket systemd sia significativamente migliore di xinetd
attivazione, se considerata isolatamente; anche quest'ultimo è stabile ed è in circolazione da più tempo. L'attivazione del socket è davvero interessante per il disaccoppiamento dei servizi:consente di avviare i servizi in parallelo, anche se devono comunicare, e consente di riavviare i servizi in modo indipendente.
Se hai un servizio che supporta xinetd
-style attivazione, può essere utilizzato con l'attivazione del socket:a .socket
descrizione con Accept=true
si comporterà allo stesso modo di xinetd
. Avrai anche bisogno di un .service
file per descrivere il servizio. Tutti i vantaggi dell'attivazione del socket systemd richiedono il supporto nel demone che fornisce il servizio. Vedi il post sul blog sull'argomento.
Il mio consiglio tende ad essere "se non è rotto, non aggiustarlo", ma se vuoi convertire un xinetd
servizio basato su systemd è certamente fattibile.
Puoi usare sia xinetd
o systemd
per l'attivazione del socket, entrambi funzioneranno. Personalmente trovo xinetd
più facile da usare perché tutto è in un unico file, ma ho anche usato systemd
perché è più flessibile, specialmente con l'ascolto su più indirizzi e il socket forwarding ai socket UNIX e non solo ai socket IP.
Qui come esempio ho usato per inoltrare la connessione TCP al socket del file 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
L'inoltro tradizionale richiede Accept=true
, systemd
i processi consapevoli dovrebbero gestire più connessioni in un processo o eseguire il fork di processi aggiuntivi come richiesto.