如果我没有登录,该服务可以完美运行,但如果我使用 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)
问题的原因可能是我执行的脚本调用了另一个脚本,如果 shell 发送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 &