我正在尝试在关闭之前运行一个需要 NetworkManager 运行的可执行文件。这是我当前拥有的服务文件(位于 /lib/systemd/system 中),如果我有以太网连接,它可以正常工作,但如果我只有无线连接,它就无法工作:
[Unit]
Requires=network.target
Requires=NetworkManager.service
Before=shutdown.target
After=network.target NetworkManager.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=MyShutdownExecutable
[Install]
wantedBy=multi-user.target
它在嵌入式设备上运行,有时用户将有以太网连接,有时只有无线连接,有时两者都有 - 因此这需要与所有这些网络连接组合一起使用。
在我的测试中,在关闭期间,我看到一条消息,指出 NetworkManager 在我的可执行文件运行之前已关闭。我的印象是,在我的服务文件中包含 After=NetworkManager.service 应该保证 NetworkManager 在我的可执行文件完成之前不会关闭 - 当我有以太网连接时似乎就是这种情况。
任何帮助将不胜感激。
答案1
您可以尝试将此作为您的服务文件吗?
[Unit]
After=wpa_supplicant.service dbus.service NetworkManager.service
Requires=wpa_supplicant.service dbus.service NetworkManager.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=MyShutdownExecutable
[Install]
WantedBy=multi-user.target
我设法让我的脚本运行起来 - 无线连接被 wpa 请求者和 dbus 断开,甚至认为 NetworkManager 仍在运行。