xinetdを使用したsystemd「ソケットの有効化」

xinetdを使用したsystemd「ソケットの有効化」

私は使用しxinetd、私の目的に適しています。しかし最近、systemdに「ソケットを有効にする」という機能が組み込まれていることがわかりました。

これらは非常に似ているようですが、systemdは「公式」なので、より良い選択肢のようです。

しかし、使用する前は本当に同じでしょうか?どのような違いを知っておくべきですか?

たとえば、最初のリクエストでドッキングされたサービスを開始したいとします。最初のアイデアはxinetdを使用することです。しかし、ソケットの起動はより良く、速く、より安定していますか?

答え1

xinetd別に考えると、システムソケットのアクティベーションがアクティベーションよりはるかに優れているとは思わない。後者も安定しており、より古い。ソケットのアクティブ化はサービスの分離にとって非常に興味深いものです。これにより、サービスが通信が必要な場合でも、サービスを並列に開始でき、サービスを独立して再起動できます。

-styleアクティベーションをサポートするサービスがある場合は、xinetdソケットアクティベーションと一緒に使用できます。.socket説明するwithはAccept=true同じ方法で動作しますxinetd.serviceサービスを記述するファイルも必要です。システムソケットのアクティブ化のすべての利点を享受するには、サービスを提供するデーモンのサポートが必要です。バラよりこのトピックに関するブログ投稿

私のアドバイスは「壊れていない場合は修正しないでください」という傾向がありますが、xinetdsystemdベースのサービスを変換したい場合は、これは確かに可能です。

答え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=truesystemd認識プロセスは単一のプロセスで複数の接続を処理するか、必要に応じて他のプロセスを分岐する必要があります。

関連情報