我一直在使用 管理所有用户级进程systemctl --user
,它提供了很多好处,包括发生错误时自动重启的能力、进程依赖性等等。
但是,我遇到的一个问题是,重启/关机不会等待用户服务结束。我看到了很多有关系统服务的信息,但没有关于用户服务的信息。
以下是我发现的一些有趣的信息:
经过进一步调查,我发现服务确实会收到终止信号。问题是 systemd 不会等待它们正常完成。令人惊讶的是,并非所有用户服务都会终止,尽管linger
我的用户已禁用这些服务。我可以通过注销图形会话、以 root 身份登录 TTY 并ps
查看哪些进程仍在运行来测试这一点。
答案1
显然,在 中运行的进程user.slice
在发出关机命令后大约 90 秒内会被(无情地)杀死,这与在 中运行的进程相反system.slice
。
我假设由 启动的进程systemctl --user
最终以 结束user.slice
。
我遇到了类似的问题,是由用于启动我的服务的启动脚本中的用户开关( su
/ )引起的( )。sudo
ExecStart=/path/to/my/startscript
在启动脚本中删除su
/并将其添加到单元文件的部分后,我的服务进程启动并在关机时得到正确处理。sudo
User=myuser
[Service]
system.slice