xinetdの代わりに。 次の2つのユニットファイルを同じ場所に作って登録する
hogehoge.socket
[Unit] Description=HOGEHOGE Echo Server Socket [Socket] ListenStream=0.0.0.0:16000 Accept=yes [Install] WantedBy=sockets.target
hogehoge@.service
[Unit] Description=HOGEHOGE Echo Server Service [Service] ExecStart=/bin/cat StandardInput=socket StandardOutput=socket StandardError=journal [Install] WantedBy=hogehoge.socket
- ListenStream
- 待ち受けポート。何行でも書くことができる。ポート番号だけを書くと IPv6に割り当てられるので、IPv4で待ちたいときは0.0.0.0を忘れずに書く
- Accept=yes
- yesにしたとき、着信したときに着信ソケットが作られて新しいサービスに受け継がれる。noだとリッスンポートが渡されるらしい。 xinetdの代わりに使うならyes
- ExecStart=/bin/cat
- 起動されるプログラム名
- StandardInput=socket
- 標準入力を選択。 デフォルトはnull
- StandardOutput=socket
- 標準出力を選択。 デフォルトはnull
- StandardError=journal
- 標準エラー出力を選択。 デフォルトはnull
- WantedBy=hogehoge.socket
- 依存関係的なやつ。 multi-user.target でも普通に動くけど、ちゃんとソケットを指定するのが礼儀らしい
systemctl enable /foo/bar/hogehoge.socket
systemctl enable /foo/bar/hogehoge@.service
systemctl start hogehoge.socket
ソケットを有効化・実行する。
ソケットの名前に@をつけたサービスが暗黙で呼ばれる
systemd.socket
systemd.exec
systemdのsocketを使ってserverを作る - Qiita