私は使用しxinetd
、私の目的に適しています。しかし最近、systemdに「ソケットを有効にする」という機能が組み込まれていることがわかりました。
これらは非常に似ているようですが、systemdは「公式」なので、より良い選択肢のようです。
しかし、使用する前は本当に同じでしょうか?どのような違いを知っておくべきですか?
たとえば、最初のリクエストでドッキングされたサービスを開始したいとします。最初のアイデアはxinetdを使用することです。しかし、ソケットの起動はより良く、速く、より安定していますか?
答え1
xinetd
別に考えると、システムソケットのアクティベーションがアクティベーションよりはるかに優れているとは思わない。後者も安定しており、より古い。ソケットのアクティブ化はサービスの分離にとって非常に興味深いものです。これにより、サービスが通信が必要な場合でも、サービスを並列に開始でき、サービスを独立して再起動できます。
-styleアクティベーションをサポートするサービスがある場合は、xinetd
ソケットアクティベーションと一緒に使用できます。.socket
説明するwithはAccept=true
同じ方法で動作しますxinetd
。.service
サービスを記述するファイルも必要です。システムソケットのアクティブ化のすべての利点を享受するには、サービスを提供するデーモンのサポートが必要です。バラよりこのトピックに関するブログ投稿。
私のアドバイスは「壊れていない場合は修正しないでください」という傾向がありますが、xinetd
systemdベースのサービスを変換したい場合は、これは確かに可能です。
答え2
xinetd
またはを使用してソケットを有効にすることができ、両方がsystemd
機能します。個人的にはxinetd
すべてが1つのファイルにあるので使いやすいと思いますがsystemd
、特に複数のアドレスを受け取り、IPソケット文字の代わりにソケットをUNIXソケットに渡す方が柔軟です。
以下は、TCP接続を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
既存の転送要件Accept=true
、systemd
認識プロセスは単一のプロセスで複数の接続を処理するか、必要に応じて他のプロセスを分岐する必要があります。