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

Ubuntu 18.04服务器在我的家庭网络中。 我正在运行:
- 使用dnsmasq进行DHCP和DNS - 使用nginx作为反向代理来访问一些Web应用程序(运行在本地主机和其他主机上)
nginx反向代理配置使用主机名,例如:
location / {
        proxy_pass http://nas.mydomain.com:8080;

然而,当重新启动服务器时,nginx尝试启动但由于无法解析其配置中的主机名而失败。如果我在启动后手动启动nginx,它会顺利启动。
这让我相信nginx在dnsmasq可用之前就开始启动了,导致无法解析主机名。
有没有办法强制nginx在dnsmasq之后启动?
2个回答

Systemd尝试并行启动多个服务,除非你告诉它不要这样做。如果你有依赖关系,你需要在服务定义文件中使用像After这样的指令。
在这种情况下,如果你需要在dnsmasq服务运行后启动nginx服务,你可以添加
After=dnsmasq.service

将其添加到nginx.service文件中。
希望这能有所帮助。

我发现这个特定的答案非常有帮助。我从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