Linux

如何在 NetworkManager 關閉之前使用 systemd 執行執行檔

  • April 10, 2017

我正在嘗試在關機之前執行一個需要執行 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 仍在執行。

引用自:https://unix.stackexchange.com/questions/253674