naX*_*aXa 10 linux service systemd
是否可以创建一个依赖于其他几个服务的服务?什么是正确的语法?
如:
[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
Run Code Online (Sandbox Code Playgroud)
目标是在操作系统重新启动后自动启动服务,并确保在服务之前启动日志记录和网络服务。
附加问题:我需要指定Restart吗?
小智 16
您发布的单元文件看起来不错。但是您在此处定义的单元没有严格的依赖关系,只有弱(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-failure或always(更多在 的手册页中systemd.service)。
此外,您的 app.jar 需要可执行才能使其工作。如果是这样并且它启动了您的应用程序,那就没问题了。我认为一个罐子必须由某事启动。喜欢java -jar app.jar,但是ofc。我在这里可能是错的。