Je ne pense pas que l'activation du socket systemd soit nettement meilleure que xinetd
l'activation, lorsqu'elle est considérée isolément ; ce dernier est également stable et existe depuis plus longtemps. L'activation de socket est vraiment intéressante pour le découplage de services :elle permet de démarrer des services en parallèle, même s'ils ont besoin de communiquer, et elle permet de redémarrer des services indépendamment.
Si vous avez un service qui prend en charge xinetd
-style activation, il peut être utilisé avec l'activation du socket :un .socket
description avec Accept=true
se comportera de la même manière que xinetd
. Vous aurez également besoin d'un .service
fichier pour décrire le service. Les avantages complets de l'activation de socket systemd nécessitent une prise en charge dans le dæmon fournissant le service. Voir le billet de blog sur le sujet.
Mon conseil a tendance à être "si ce n'est pas cassé, ne le réparez pas", mais si vous voulez convertir un xinetd
-service basé sur systemd c'est certainement faisable.
Vous pouvez utiliser soit xinetd
ou systemd
pour l'activation du socket, les deux fonctionneront. Personnellement, je trouve xinetd
plus facile à utiliser car tout est dans un seul fichier, mais ont également utilisé systemd
car il est plus flexible, notamment avec l'écoute sur plusieurs adresses et le transfert de socket vers les sockets UNIX et pas seulement vers les sockets IP.
Ici, à titre d'exemple, j'ai utilisé pour transférer la connexion TCP vers le socket de fichier 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
Le transfert traditionnel nécessite Accept=true
, systemd
les processus conscients sont censés gérer plusieurs connexions dans un processus ou créer des processus supplémentaires selon les besoins.