Nginx

Systemd - 僅在 DNS 可用後啟動服務

  • January 24, 2022

我有幾個服務,最著名的是 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站點上有完整的文章。

引用自:https://serverfault.com/questions/867830