如何更改 systemd 服务的启动顺序

如何更改 systemd 服务的启动顺序


我正在 家庭网络上运行 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

相关内容