systemdでsocatを直接起動できますか?

systemdでsocatを直接起動できますか?

次のようなソカットコマンドラインは、シェルプロンプトに入力すると期待どおりに機能します。

# /usr/bin/socat UDP-RECV:4321 STDOUT

UDP ポート 4321 でリッスンしてリッスンするすべてを標準出力に書き込みます。

以下は、受信したデータをsystemdログ(サービス標準出力のデフォルトの宛先)に書き込む目的で、このコマンドをsystemdサービスとして開始しようとしています。

# /etc/systemd/system/socat.service
[Service]
ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT

ただし、サービスが開始されると socat はすぐに終了します。

Process: 7425 ExecStart=/usr/bin/socat UDP-RECV:4321 STDOUT (code=exited, status=0/SUCCESS)

socatrunを使用してこの問題を調査したところ、-d -d -d -dstdoutでEOFが発生することがわかりました。

N starting data transfer loop with FDs [5,5] and [1,1]
N socket 2 (fd 1) is at EOF
I close(5)
N exiting with status 0

socatシステムサービスとして使用できますか?

ベストアンサー1

問題はsocat基本的に双方向のために発生します。標準入力を読み取ろうとすると/dev/nullEOFを受け取り、終了します。

回避策は、次の-uオプションを使用することです。

ExecStart=/usr/bin/socat -u UDP-RECV:4321 STDOUT

UDP-RECV:4321これはsocatにから一方向に実行するように指示しますSTDOUT

おすすめ記事