systemd 有個 network-online.target
,許多程式會依賴它以在網路連線成功後纔啓動。但如果使用 NetworkManager 提供的 NetworkManager-wait-online.service
,會導致某些程式啓動過早,如 shadowsocks-libev 使用域名作爲伺服器地址時報錯 Temporary failure in name resolution
。
在換用百合仙子寫的 wait-online 後,問題消失。日誌中可以看到 shadowsocks-libev 確實在 network-online.target
active 後纔啓動。於是查看 NetworkManager-wait-online.service
:
1 | # /usr/lib/systemd/system/NetworkManager-wait-online.service |
閱讀 nm-online
的 man page 後發現,-s
是在 NetworkManager 啓動連線時就退出,而非網路連線成功。我選擇使用 drop-in file 來去掉這個選項:
1 | # /etc/systemd/system/NetworkManager-wait-online.service.d/exit-after-connected.conf |
問題解決。