systemd サービスファイルがソケットを閉じます。

systemd サービスファイルがソケットを閉じます。

systemdを使用してC ++バイナリを実行する必要があります。

バイナリを直接実行するか、スクリプトを使用すると、bash数日間正常に実行されます。

  • nohup ./testbinary &
  • ./test.sh

テスト.sh:

#!/bin/bash
LD_LIBRARY_PATH="/home/test01/lib/"
export LD_LIBRARY_PATH
/home/test01/testbinary

ただし、次のシステムサービスファイルを使用してこのスクリプトを実行すると:

[Unit]
Description=cr06

Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
ExecStart=/home/test01/test.sh
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

6〜7分ほど実行するとエラーが発生し、サービスを再起動する必要があります。

このバイナリを介して他のアプリケーションに確立されたソケット接続に失敗しました。これは、バイナリがシステムサービスとして実行されている場合にのみ発生します。

答え1

あなたのシナリオで2つのことを見つけました。

  1. ./test.sh。代わりに呼び出しています/home/test01/testbinary。これにより、作業ディレクトリがtestbinary[Service]デバイスセクションで作業ディレクトリを指定してみてください。

    WorkingDirectory=/home/test01
    
  2. あなたのサービスは次のように実行され、rootテストは$USER。通常、すべての操作を実行しますが、rootプログラムはAF_UNIX他のプロセス(root以外のユーザーとして実行)が読み書きできないソケットを生成できます。

    この場合は、[Service]デバイスセクションに追加してみてください。

    User=test01
    

LD_LIBRARY_PATH私はそれが要因だとは思わない。これが要因であれば、exit-status (203)どのライブラリがロードに失敗したかを示す素晴らしいメッセージで、プログラムはすぐに失敗します。

答え2

スクリプトファイルにLimitNOFile = 5000を追加すると、正常に実行されます。

関連情報