私はxinetd
を使用し、それは私の目的のために機能します。しかし、最近、systemdに「ソケットアクティベーション」と呼ばれるものが組み込まれていることを発見しました。
これら2つは非常に似ているようですが、systemdは「公式」であり、より良い選択のようです。
しかし、それを使用する前に、それらは本当に同じですか?知っておくべき違いはありますか?
たとえば、Docker化されたサービスは、最初に要求されたときにのみ開始したいと思っています。私の最初の考えは、xinetdを使用することです。しかし、ソケットのアクティベーションはより良い/より速い/より安定している/何ですか?
Systemdソケットのアクティベーションを単独で考えると、xinetd
アクティベーションよりもはるかに優れているとは思いません。後者も安定しており、より長く使用されています。ソケットのアクティブ化は、サービスの分離にとって非常に興味深いものです。通信が必要な場合でも、サービスを並行して開始でき、サービスを個別に再起動できます。
xinetd
スタイルのアクティベーションをサポートするサービスがある場合、それをソケットアクティベーションで使用できます:a .socket
description with Accept=true
はxinetd
と同じように動作します。また、.service
サービスを説明するファイル。 systemdソケットのアクティブ化の完全な利点には、サービスを提供するデーモンのサポートが必要です。 トピックに関するブログ投稿 を参照してください。
私のアドバイスは「壊れていない場合は修正しない」という傾向にありますが、xinetd
ベースのサービスをsystemdに変換したい場合は確かに実現可能です。
ソケットのアクティブ化には、xinetd
またはsystemd
のいずれかを使用できます。どちらでも機能します。すべてが1つのファイルにあるため、xinetd
は個人的に使いやすいと思いますが、systemd
も使用しています。これは、特にIPソケットだけでなく、複数のアドレスをリッスンし、UNIXソケットにソケットを転送する場合の柔軟性が高いためです。
ここでは例として、MySQLファイルソケットにTCP接続を転送するために使用しました。
/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
対応プロセスは、1つのプロセスで複数の接続を処理するか、必要に応じて追加のプロセスをフォークすることになっています。