如何使用 dont-sleep.service 阻止 systemd suspend 停止任何服务

如何使用 dont-sleep.service 阻止 systemd suspend 停止任何服务

我有一台安装了 16.04.1 LTS 的 HTPC/NAS,我想让它在 15 分钟不活动后进入挂起模式。另一方面,如果……我想禁止挂起模式。

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

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

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

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

我该如何修复它?

systemctl status dont-sleep.service:

$ sudo systemctl status dont-sleep.service 
● dont-sleep.service - Inhibit suspend.
   Loaded: loaded (/etc/systemd/system/dont-sleep.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Di 2016-09-27 18:53:44 CEST; 28min ago
  Process: 10292 ExecStart=/usr/local/bin/dont-sleep (code=exited, status=1/FAILLURE)
 Main PID: 10292 (code=exited, status=1/FAILURE)

Sep 27 18:53:44 HTPC systemd[1]: Starting Inhibit suspend....
Sep 27 18:53:44 HTPC dont-sleep[10292]: Test for open ssh connections
Sep 27 18:53:44 HTPC dont-sleep[10292]: Open connections found
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Main process exited, code=exited, status=1/FAILURE
Sep 27 18:53:44 HTPC systemd[1]: Failed to start Inhibit suspend..
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Unit entered failed state.
Sep 27 18:53:44 HTPC systemd[1]: dont-sleep.service: Failed with result 'exit-code'.

不要睡觉.服务:

[Unit]
Description=Inhibit suspend.
Before=sleep.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dont-sleep
User=xxx
Group=xxx

[Install]
RequiredBy=sleep.target

答案1

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

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

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

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

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

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

相关内容