systemd 服务与多个 After

systemd 服务与多个 After

是否可以创建依赖于其他几个服务的服务?正确的语法是什么?

例如:

[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target

[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

目标是在操作系统重启后自动启动服务,并确保在服务之前启动日志和网络服务。

附加问题:我需要指定吗Restart

答案1

您发布的单元文件看起来不错。但是您在此处定义的单元没有严格依赖关系,只有弱依赖关系(Wants=而不是Requires=)。这意味着如果 network.target 不存在或无法启动,则无论如何都会启动此单元。After=(和Before=)仅用于排序,而不是依赖关系管理。因此,如果您的应用程序需求另一项服务,请使用Requires=。如果需要该服务可自行启动、After=额外使用。

要使您的单元在启动后自动启动,您必须启用它。Systemd 需要知道将其链接到何处以便启动,这就是WantedBy=本节中[Install]的用途。编辑单元文件并将其保存后,/etc/systemd/system/my-unit.service您必须重新加载 systemd 守护程序以使其获取新单元,然后才能启用它;命令是systemctl daemon-reload。要启用单元类型systemctl enable my-unit.service。这会将符号链接添加/etc/systemd/system/multi-user.target.wants/到您的单元文件中。

要手动启动它,您可以输入systemctl start my-unit.service

Restart=仅当您希望应用程序在退出时自动重新启动时才需要。重新启动的时间有多种可能,例如on-failurealways(更多信息请参阅手册页systemd.service)。

此外,您的 app.jar 需要可执行才能正常工作。如果是,并且它启动了您的应用程序,那么就没问题了。我认为 jar 必须由某些东西启动。比如java -jar app.jar,但当然。我可能错了。

相关内容