如何通过 dont-sleep.service 防止 systemd 挂起停止任何服务

egl*_*l86 6 suspend systemd 16.04

我有一个 16.04.1 LTS 的 HTPC/NAS,我想在 15 分钟不活动后进入挂起模式。\n另一方面,如果...我想禁止挂起模式。

\n\n
    \n
  • ...我通过 ssh 登录。
  • \n
  • ... pyLoad 正在下载。
  • \n
  • ...有活动的屏幕会话。
  • \n
\n\n

我创建了一个dont-sleep.service/etc/systemd/system/. 该服务在sleep.target之前执行一个dont-sleep脚本,如果上述任何一点为真,则返回 1。

\n\n

到目前为止,这似乎有效,但是我注意到,在通过 sftp 观看视频时,连接似乎每 15 分钟就会中断一次。\nsystemctl status dont-sleep.service告诉我,每当 systemd 尝试进入挂起状态但被我的系统阻止时,就会发生这种情况。dont-sleep.service

\n\n

所以我的假设是,systemd 在调用我的dont-sleep脚本之前或同时停止一些必要的服务,并在我的脚本返回 1 后重新启动它们。

\n\n

我该如何解决这个问题?

\n\n

systemctl status dont-sleep.service:

\n\n
$ sudo systemctl status dont-sleep.service \n\xe2\x97\x8f dont-sleep.service - Inhibit suspend.\n   Loaded: loaded (/etc/systemd/system/dont-sleep.service; enabled; vendor preset: enabled)\n   Active: failed (Result: exit-code) since Di 2016-09-27 18:53:44 CEST; 28min ago\n  Process: 10292 ExecStart=/usr/local/bin/dont-sleep (code=exited, status=1/FAILLURE)\n Main PID: 10292 (code=exited, status=1/FAILURE)\n\nSep 27 18:53:44 HTPC systemd[1]: Starting Inhibit suspend....\nSep 27 18:53:44 HTPC dont-sleep[10292]: Test for open ssh connections\nSep 27 18:53:44 HTPC dont-sleep[10292]: Open connections found\nSep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Main process exited, code=exited, status=1/FAILURE\nSep 27 18:53:44 HTPC systemd[1]: Failed to start Inhibit suspend..\nSep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Unit entered failed state.\nSep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Failed with result 'exit-code'.\n
Run Code Online (Sandbox Code Playgroud)\n\n

不要睡觉.服务:

\n\n
[Unit]\nDescription=Inhibit suspend.\nBefore=sleep.target\n\n[Service]\nType=oneshot\nExecStart=/usr/local/bin/dont-sleep\nUser=xxx\nGroup=xxx\n\n[Install]\nRequiredBy=sleep.target\n
Run Code Online (Sandbox Code Playgroud)\n

小智 1

我一直在尝试阻止 Ubuntu 16.04 在远程备份期间休眠(使用 backuppc 通过 ssh 运行 rsync)。我已经实施了上面的解决方案,到目前为止它似乎对我有用。

为了回答你的问题,在运行 dont-sleep 的同时,我在系统日志中看到 NetworkManager 断开网络然后重新连接(在我的情况下大约需要 12 秒)。由于 ssh 非常强大,并且似乎不关心像这样的小网络中断,这似乎并不妨碍我的备份,尽管它显然并不理想。

目前,我假设网络断开连接的原因是因为所有睡眠进程都是并行运行的,这在 systemd-suspend 的手册页中进行了解释:

该目录中的可执行文件是并行执行的,直到所有可执行文件都完成后才会继续执行该操作。

http://manpages.ubuntu.com/manpages/zesty/man8/systemd-suspend.service.8.html

如果是这种情况,那么似乎没有希望保证成为第一个进程并在任何其他睡眠进程开始运行之前停止睡眠操作(至少无需修改 systemd 以专门支持这一点)。