Linux
如何在 NetworkManager 關閉之前使用 systemd 執行執行檔
我正在嘗試在關機之前執行一個需要執行 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 在我的執行檔完成之前不會關閉 - 這似乎是我有乙太網連接的情況。
任何幫助將不勝感激。
你可以試試這個作為你的服務文件。
[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 supplicant 和 dbus 拆除,即使 NetworkManager 仍在執行。