我正在 家庭网络上运行 Ubuntu 18.04 服务器:
- 用于 DHCP 和 DNS 的 dnsmasq
- nginx 作为某些 Web 应用程序的反向代理(在本地主机和其他主机上运行)
nginx 反向代理配置使用主机名,例如:
location / {
proxy_pass http://nas.mydomain.com:8080;
但是,重新启动服务器时,nginx 尝试启动,但由于无法解析其配置中的主机名而失败。如果我在启动后手动启动 nginx,它会启动而不会出现错误。
这使我相信 nginx 在 dnsmasq 可用于解析主机名之前就已经启动了。
有没有办法强制 nginx 在 dnsmasq 之后启动?
答案1
Systemd 会尝试并行启动多个服务,除非您禁止它这样做。如果您有依赖项,则需要在服务定义文件中使用 After 之类的指令。
在这种情况下,如果您需要在 dnsmasq 服务运行后启动 nginx 服务,则可以添加
After=dnsmasq.service
进入 nginx.service 文件。
希望这可以帮助。
答案2
我发现这个答案很有帮助。我从https://www.digitalocean.com/community/questions/start-a-service-only-after-mysql-has-entered-active-running-state
一般来说,要声明严格依赖关系,您需要 After 和 Requires:
[Unit]
Description=My application
After=mysqld.service
Requires=mysqld.service
如果由于某种原因您仍然没有得到预期的行为,另一个选择是在 ExecStartPre 中使用一个脚本,该脚本会阻塞直到它可以连接到数据库。wait-for-it 是一个有用的工具:https://github.com/vishnubob/wait-for-it
有关使用 systemd 单元文件的更多信息,请查看: https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files