注销后执行脚本

注销后执行脚本

我使用了这个注销和挂起脚本,绑定到 Debian Jessie 和 Gnome 桌面下的键盘快捷键:

#!/bin/bash
{ sleep 8; sudo systemctl suspend; } & 
gnome-session-quit --logout --no-prompt

现在有了 Stretch,这个就不再起作用了。快速测试表明 sleep 之后的命令永远不会被执行(我用 touch 命令替换了挂起部分)。有人知道为什么吗? Debian 8 和 9 之间或 Gnome 3.16 和 3.22 之间可能发生什么变化?有什么推荐的方法来解决这个问题吗?

答案1

在这里回答我自己的问题,因为我可能已经找到了罪魁祸首。

我的 Debian 9 安装的 systemd 版本为 232。系统变更日志这是我在 2016 年 5 月找到的版本 230 的内容:

现在,当用户注销时,systemd-logind 将默认终止属于用户会话范围单元 (session-XX.scope) 一部分的用户进程。此行为由 logind.conf 中的 KillUserProcesses= 设置控制,之前的默认值“no”现在更改为“yes”。这意味着用户会话将在之后被正确清理,但需要额外的步骤来允许故意长时间运行的进程在注销后继续存在(...)

最简单的修复似乎是nohup按照@DopeGhoti 在评论中建议的方式应用。

相关内容