我有几个服务,最值得注意的是nginx和ntpd,这取决于正在工作的DNSparsing正确启动。 目前,这些服务都不能在启动时正确启动,但是一旦机器启动后手动干预就可以正常启动,日志中的某些消息不能parsing名称。
这导致我相信我正在与systemd竞争。 我的服务器指向名称服务器的127.0.0.1。 绑定到localhost:53是pdns-recursor。 我已经设置ntp和nginx在单元文件中被WantedBy pdns-recursor如下
[Unit] WantedBy=pdns-recursor.service
不过,我仍然在nginx和ntp中收到关于在启动时未能parsing名字的日志消息。
在这些服务尝试启动之前,如何validationDNS是否完全启动? 我正在使用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.
尝试使用:
[Unit] After=network-online.target Wants=network-online.target
在Unix和Linux以及FreeDesktop站点上都有完整的文章 。
我同意你的竞争状态诊断…除非依赖关系是明确configuration,systemd将尝试并行启动这些服务。 但是我不认为WantedBy指令可以帮助你,因为这会影响安装依赖关系,而不是启动依赖关系。
我认为你要找的是一个结合的要求指令和After指令。 对于每一个ntp和nginx,我想你想添加以下到你的单元文件:
Wants=pdns-recursor.service After=pdns-recursor.service
这两个选项应该确保在ntp / nginx服务之前启动DNS服务,希望能够解决您的竞争问题。
作为一个腰带和吊带types的人,我实际上build议把你的名字/ IP映射到你的/ etc / hosts文件中; 这样,即使您的DNS失败,其他服务也可以启动。 如果您真的想尝试使用DNS优先于静态文件,则可以切换parsing顺序。
不是我的问题的适当的解决scheme,几乎肯定不会通过我的代码审查,但也许有助于其他人。
我在我的ntp和nginx单元文件中放置了一个exec启动先决条件,继续尝试parsing名称,然后继续。
ExecStartPre = / bin / bash -c'直到主机example.com; 做睡1; 完成”