Systemd 服务在其用户出口处停止 - debian 9stretch

Apa*_*dos 5 debian systemd services teamspeak

所以我遇到了在设置我的 teampeak 服务器时遇到的问题(正确!)。Teamspeak Server 及其配置完全没问题。当我希望它在系统启动时启动时,我的问题就开始了。\n现在介绍如何创建自动启动脚本等。我已经完成了,并且它在过去一直有效。但这次我只想使用 systemd 服务来完成此操作,因为 teampeak 已经提供了一个 startscript。

\n\n

因此,在给出一些背景信息后,让我们开始解决问题:\n通过我现在正在使用的服务配置(见下文),teamspeak 服务器在系统启动时完美启动。但是,当我使用用户“teamspeak”登录执行一些操作然后输入 exit 时,teamspeak 服务器将关闭并随后重新启动。

\n\n
[Unit]\nDescription=TeamSpeak 3 Server\n\n[Service]\nExecStart=/teamspeak/ts3server_startscript.sh start\nExecStop=/teamspeak/ts3server_startscript.sh stop\nPIDFile=/teamspeak/ts3server.pid\nRestart=always\nStandardOutput=syslog\nStandardError=syslog\nSyslogIdentifier=teamspeak_server\nUser=teamspeak\nGroup=teamspeak\nType=Forking\n[Install]\nWantedBy=multi-user.target\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,重新启动来自“Restart=always”,我百分百确定,teamspeak-shutdown 来自该服务。我已经尝试过“RemainAfterExit = true”,但唯一做的事情是,在用户注销后不会重新启动teamspeak服务器(因为它让它认为服务仍然处于活动状态,但进程全部关闭。至少这就是我理解该服务正在运行以及为什么它停止我的 teampeak 服务器的方式。

\n\n

简而言之:当teamspeak用户退出其会话时,如何防止服务调用ExecStop命令(在我的例子中是putty,ssh连接)

\n\n

这是所有 systemd.service 选项的一个很好的总结:点击我

\n\n

尽管它与我上面写的内容相反,但我也编写了一个脚本,将 ts3server_minimal_startscript.sh 包装到屏幕会话中。该脚本在手动使用时工作得非常好,但通过服务使用它时我仍然遇到完全相同的问题。正如我所说,我更喜欢非屏幕版本,因为 ts3server_startscript.sh 已经为 ts-server 创建了自己的进程。

\n\n

编辑:\n我忘了说,我在 /etc/systemd/system/teamspeak.service 创建了该服务。\n根据请求,这是我退出 teampeak 用户之前的 systemctl 状态答案:

\n\n
\xe2\x97\x8f teamspeak.service - TeamSpeak 3 Server\n   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor \npreset\n: enabled)\n   Active: active (running) since Sat 2018-04-14 17:35:08 CEST; 23h a\ngo\n  Process: 3344 ExecStop=/teamspeak/ts3server_startscript.sh stop \n(code=exited,\nstatus=0/SUCCESS)\n Main PID: 3361 (ts3server)\n    Tasks: 17 (limit: 4915)\n   CGroup: /system.slice/teamspeak.service\n           \xe2\x94\x94\xe2\x94\x803361 ./ts3server\n\nApr 14 17:35:08 srv83030 systemd[1]: Started TeamSpeak 3 Server.\nApr 14 17:35:08 srv83030 teamspeak_server[3357]: Starting the TeamSpeak 3 \nserver\n
Run Code Online (Sandbox Code Playgroud)\n\n

退出 teampeak 用户后 1 毫秒:

\n\n
\xe2\x97\x8f teamspeak.service - TeamSpeak 3 Server\n   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor \npreset\n: enabled)\n   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 1ms a\ngo\n  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop \n(code=exited,\nstatus=0/SUCCESS)\n Main PID: 5388 (ts3server_start)\n    Tasks: 0 (limit: 4915)\n   CGroup: /system.slice/teamspeak.service\n           \xe2\x94\x94\xe2\x94\x805388 /bin/sh /teamspeak/ts3server_startscript.sh start\n\nApr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.\n
Run Code Online (Sandbox Code Playgroud)\n\n

退出 Teamspeak 用户 2 秒后:

\n\n
\xe2\x97\x8f teamspeak.service - TeamSpeak 3 Server\n   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor \npreset\n: enabled)\n   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 2s ag\no\n  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop \n(code=exited,\nstatus=0/SUCCESS)\n Main PID: 5392 (ts3server)\n    Tasks: 16 (limit: 4915)\n   CGroup: /system.slice/teamspeak.service\n           \xe2\x94\x94\xe2\x94\x805392 ./ts3server\n\nApr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.\nApr 15 16:55:11 srv83030 teamspeak_server[5388]: Starting the TeamSpeak 3 \nserver\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我使用 teampeak 用户重新登录后又出现了一个:

\n\n
\xe2\x97\x8f teamspeak.service - TeamSpeak 3 Server\n   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor \npreset: enabled)\n   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 3min 43s ago\n  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop \n(code=exited, status=0/SUCCESS)\n Main PID: 5392 (ts3server)\n    Tasks: 16 (limit: 4915)\n   CGroup: /system.slice/teamspeak.service\n           \xe2\x94\x94\xe2\x94\x805392 ./ts3server\n\nApr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.\nApr 15 16:55:11 srv83030 teamspeak_server[5388]: Starting the TeamSpeak 3 \nserver\n
Run Code Online (Sandbox Code Playgroud)\n\n

EDIT2:也许知道 teampeak 用户的主目录位于 /teamspeak 也很有用。所以起始脚本也在那里。

\n

meu*_*euh 6

您可以尝试将 systemd 配置为在所需用户注销时不终止用户进程:

sudo loginctl enable-linger teamspeak
Run Code Online (Sandbox Code Playgroud)


scr*_*rel 0

我认为该服务不应该为特定用户/组(teamspeak)运行。

首先,备份所有文件(服务文件等),然后禁用它:

# systemctl disable teamspeak.service
Run Code Online (Sandbox Code Playgroud)

另外,删除/删除您在系统上复制的物理teamspeak.service 文件。

以用户身份 ssh 进入您的服务器root,然后尝试以下操作:

编辑你的teamspeak.service文件:

[Unit]
Description=TeamSpeak 3 Server
After=network.target

[Service]
ExecStart=/teamspeak/ts3server_startscript.sh start
ExecStop=/teamspeak/ts3server_startscript.sh stop
RestartSec=1s


[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

接下来,安装systemd服务单元并启用它,以便它将在启动时执行:

# cp  teamspeak.service /etc/systemd/system/
# chmod 0664 /etc/systemd/system/teamspeak.service
# systemctl daemon-reload
# systemctl enable teamspeak.service
Run Code Online (Sandbox Code Playgroud)

启动服务:

# systemctl start teamspeak.service
Run Code Online (Sandbox Code Playgroud)

寻找 OK 响应(绿点)。

查找服务是否存在或已配置:

# systemctl list-unit-files --type=service | grep teamspeak
Run Code Online (Sandbox Code Playgroud)

询问服务:

# service teamspeak status
Run Code Online (Sandbox Code Playgroud)

注意:systemd 参考 URL - https://wiki.debian.org/systemd