Nginx
Systemd - 僅在 DNS 可用後啟動服務
我有幾個服務,最著名的是 nginx 和 ntpd,它們依賴於有效的 DNS 解析才能正常啟動。目前,這些服務都不能在引導時正確啟動,但是在機器啟動後手動干預時可以正常啟動,日誌中有一些關於無法解析名稱的消息。
這讓我相信我遇到了 systemd 的競爭情況。我的伺服器指向 127.0.0.1 的名稱伺服器。綁定到 localhost:53 的是 pdns-recursor。我在它們的單元文件中將 ntp 和 nginx 設置為 WantedBy pdns-recursor,如下所示
[Unit] WantedBy=pdns-recursor.service
但是,我仍然在 nginx 和 ntp 中收到有關在引導時無法解析名稱的日誌消息。
在這些服務嘗試啟動之前,如何驗證 DNS 是否已完全啟動?我正在使用 Ubuntu 16.04
Aug 09 22:35:25 host.blah ntpd[3574]: restrict: ignoring line 21, address/host 'ntp.blah' unusable. Aug 09 22:35:26 host.blah ntpd[3574]: restrict: ignoring line 23, address/host 'ntp.blah' unusable. Aug 09 22:35:28 host.blah ntpd[3574]: restrict: ignoring line 25, address/host 'ntp.blah' unusable. Aug 09 22:35:29 host.blah ntpd[3574]: restrict: ignoring line 27, address/host 'ntp.blah' unusable.
我在我的 ntp 和 nginx 單元文件中放置了一個 exec start 先決條件,以便在繼續之前繼續嘗試解析名稱。
這工作正常。像等待其他服務上線這樣的正常系統結構是不可靠的,因為 pdns 守護程序啟動並不意味著它一定能夠在啟動的前幾毫秒內回答查詢。
ExecStartPre=/bin/bash -c 'until host example.com; do sleep 1; done'
嘗試使用:
[Unit] After=network-online.target Wants=network-online.target
在Unix 和 Linux以及FreeDesktop站點上有完整的文章。