(库存 Debian 测试又名拉伸 9,所以我有一个常规的 systemd+logind+NetworkManager+GNOME 堆栈)
我有一对要在启动/关闭和恢复/挂起时运行的脚本。此脚本需要在运行时存在网络。我已尝试使用以下脚本进行此操作:
[Unit]
Description=Yamaha Reciever power
Requires=network-online.target
After=network-online.target
Before=sleep.target
Conflicts=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/av-up
ExecStop=/usr/local/bin/av-down
RemainAfterExit=yes
[Install]
WantedBy=graphical.target
Run Code Online (Sandbox Code Playgroud)
这在启动/关闭时正常工作,但是在挂起期间它在网络关闭后运行,因此失败。
我已经确定这是因为在 systemd 下挂起是如何进行的:
systemctl suspend
)向 logind 发送 dbus 调用启动。NetworkManager 侦听 PrepareToShutdown,因此在 (2) 处移除网络,而当 systemd 在 (3) 处实际开始挂起时,我的单元会被触发。NetworkManager 使用 logind 保持“禁止”锁定,以确保它在 (3) 之前关闭网络。(旁注:像 systemd 控制挂起/恢复这样的东西似乎很疯狂,只是为了用 logind 来颠覆它,让东西规避这一点)
在网络仍在运行时触发程序在挂起/恢复时运行的正确方法是什么?
我应该使用 NetworkManager pre-down 脚本吗?如果是这样,如果网络出现故障但我没有挂起,我该如何阻止它触发?
有没有办法提前挂入挂起过程?
有没有办法让 …