![以用户身份运行的系统服务在注销时终止](https://linux22.com/image/154384/%E4%BB%A5%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E5%9C%A8%E6%B3%A8%E9%94%80%E6%97%B6%E7%BB%88%E6%AD%A2.png)
我有一个为选定用户执行的系统服务。名称是serv@<uid>
(<uid>
是用户的 UID)。我想与服务共享用户的资源限制(将其放入user-<uid>.slice
),并且我还想使用他的权限。
/etc/systemd/system/[email protected]
[Unit]
Description=My service for user %i
[Service]
Type=simple
ExecStart=/usr/local/bin/serv.sh
Restart=always
User=%i
Slice=user-%i.slice
SuccessExitStatus=0 255 SIGKILL SIGTERM
[Install]
WantedBy=multi-user.target
当用户注销时,使用 SIGTERM 终止服务。为什么服务没有重新启动?如何设置才不会终止服务?
答案1
对我来说,解决方案是loginctl enable-linger username
。如果没有这个,当用户注销时服务就会终止。https://wiki.archlinux.org/index.php/Systemd/User#Automatic_start-up_of_systemd_user_instances
答案2
您可以更改登录配置:
/etc/systemd/logind.conf
[Login]
…
KillUserProcesses=no
…
这也会改变其他服务和后台进程的行为(例如screen
,tmux
)。看问题#3483;
在那之后跑systemctl restart systemd-logind
。