SSH 接続が切断された後、サービスは終了します。

SSH 接続が切断された後、サービスは終了します。

ログインしないとサービスは完全に実行されますが、sshを使用して接続してから切断するとサービスは終了します。このサービスは、SSHを介してアクセスするユーザーに属します。これは私の現在のts3.serviceファイルです。

[Unit]
Description=TeamSpeak3Server

[Service]
User=user1
Group=staff
Type=forking
WorkingDirectory=/usr/local/bin/teamspeak3-server_linux_amd64
ExecStart=/usr/local/bin/teamspeak3-server_linux_amd64/ts3server_startscript.sh start
ExecStop=/usr/local/bin/teamspeak3-server_linux_amd64/ts3server_startscript.sh stop
PIDFile=/usr/local/bin/teamspeak3-server_linux_amd64/ts3server.pid
RestartSec=5
Restart=always
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

ExecStartを次のように変更してみました。

ExecStart=/usr/bin/nohup /usr/local/bin/teamspeak3-server_linux_amd64/ts3server_startscript.sh start

他のサービス(openvpnなど)は、SSHログアウト後も維持されます。再接続した後、systemdプロセスの状態は次のとおりです。

active (exited)

そして正常な状態は

active (running)

問題の原因は、私が実行しているスクリプトがシェルがighupメッセージを送信したときに終了する別のスクリプトを呼び出すためです。回答ありがとうございます。

編集する:

ts3server_startscript.shの重要な部分は次のとおりです。

COMMANDLINE_PARAMETERS="${2}"
D1=$(readlink -f "$0")
BINARYPATH="$(dirname "${D1}")"
cd "${BINARYPATH}"
LIBRARYPATH="$(pwd)"
BINARYNAME="ts3server"

if [ -e "$BINARYNAME" ]; then
  if[ -x "$BINARYNAME" ]; then
  export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBARY_PATH}"
  "./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &
  PID=$!
  ps -p ${PID} > /dev/null 2>&1
  if [ "$?" -ne "0" ]; then
      echo "..."
  else
      echo $PID > ts3server.pid
  fi

したがって、正しく解釈すると、サーバーはコンソールから起動します。

     "./${BINARYNAME}" ${COMMANDLINE_PARAMETERS} > /dev/null &

ベストアンサー1

おすすめ記事