是否可以创建依赖于其他几个服务的服务?什么是正确的语法?
如:
[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
吗?
您发布的单元文件看起来不错。但是您在此处定义的单元没有严格的依赖关系,只有弱(
Wants=
而不是Requires=
)。这意味着如果 network.target 不存在或无法启动,则无论如何都会启动该单元。After=
(andBefore=
) 仅用于排序,不用于依赖管理。因此,如果您的应用需要其他服务,请使用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-failure
或always
(更多信息在 的手册页中systemd.service
)。此外,您的 app.jar 需要可执行才能使其正常工作。如果是并且它启动了您的应用程序,那就没问题了。我认为一个罐子必须由某事开始。喜欢
java -jar app.jar
,但ofc。我在这里可能是错的。