ログインしないとサービスは完全に実行されますが、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 &