在 Spring Boot 应用程序中,它会查找本地resources
文件夹来加载配置。因此,其启动 shell 脚本需要在此文件夹中运行:
x.jar
resources
|- application.yml
|- more.yml
startup.sh
我正在写作app.service
,但我被困在这里:
[Unit]
Description=service for app
After=syslog.target network.target
[Service]
Type=forking
ExecStart=cd /data/flume; ./control.sh start
ExecReload=cd /data/flume; ./control.sh restart
ExecStop=cd /data/flume; ./control.sh stop
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
可执行路径不是绝对的,忽略:cd /data/flume;/bin/bash startup.sh
有可能在 systemd 中使用它吗Chdir
?或者有没有什么好方法可以实现这一点?
答案1
该选项是[Service]
WorkingDirectory=
。
但是无论如何你都必须指定脚本的完整路径——ExecStart 行不是 shell;它们有自己的规则,不同于 shell 命令。
[Service]
ExecStart=/data/flume/control.sh start
WorkingDirectory=/data/flume
(即使在实际的 shell 中,你也不需要进入目录来运行其中的脚本 - 你可以总是./
用脚本的完整路径替换。)
最后,很多希望直接启动服务,没有使用任何“control.sh”或“startup.sh”包装器脚本。如果它们设置了环境变量,您也可以在 .service 中设置它们。