我正在编写一个linux服务,将我的springboot web应用程序部署为一个服务。
[Unit]
Description=My Webapp Java REST Service
[Service]
User=ubuntu
# The configuration file application.properties should be here:
#change this to your workspace
WorkingDirectory=/home/ubuntu
#path to executable.
#executable is a bash script which calls jar file
ExecStart=/home/ubuntu/spring-start
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
我的脚本文件spring-start.sh
sudo java -jar "/home/ubuntu/FirstWebAppWithoutDB.jar"
我还通过chmod u+x spring-start.sh
向www.example.com授予了执行权限spring-start.sh
sudo systemctl daemon-reload
sudo systemctl enable springboot.service
sudo systemctl start springboot
sudo systemctl status springboot
不幸的是,该服务失败,错误Exec格式错误:
springboot.service: Failed to execute command: Exec format error
Jul 14 07:39:56 ip-172-31-40-71 systemd[10075]: springboot.service: Failed at step EXEC spawning /home/ubuntu/spring-start.sh: Exec format error
4条答案
按热度按时间tjjdgumg1#
添加shebang到脚本
和执行许可
zmeyuzjn2#
您的spring-start.sh由 bash 执行,您需要在springboot.service文件中显式显示ExecStart,如下所示:执行启动=/bin/bash /home/ubuntu/Spring启动. sh
9rygscc13#
如果你调用的是一个 binary 而不是一个脚本,请确保它是为正确的架构(arm/x86)构建的,并且你可以直接运行它,这可能会让你看到问题所在。
我的二进制文件是为x86构建的,当我在arm上运行它时,控制台错误是
unexpected )
,但这导致二进制文件出错,导致systemd记录Exec format error
,这与服务文件中的格式无关。c2e8gylq4#
执行开始=/bin/bash... script.sh