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 &

관련 정보