为什么我在编写Linux服务时会遇到Exec格式错误?

hjzp0vay  于 2022-12-22  发布在  Linux
关注(0)|答案(4)|浏览(360)

我正在编写一个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
tjjdgumg

tjjdgumg1#

添加shebang到脚本

#!/bin/bash
sudo java -jar "/home/ubuntu/FirstWebAppWithoutDB.jar"

和执行许可

chmod +x spring-start.sh
zmeyuzjn

zmeyuzjn2#

您的spring-start.shbash 执行,您需要在springboot.service文件中显式显示ExecStart,如下所示:执行启动=/bin/bash /home/ubuntu/Spring启动. sh

9rygscc1

9rygscc13#

如果你调用的是一个 binary 而不是一个脚本,请确保它是为正确的架构(arm/x86)构建的,并且你可以直接运行它,这可能会让你看到问题所在。
我的二进制文件是为x86构建的,当我在arm上运行它时,控制台错误是unexpected ),但这导致二进制文件出错,导致systemd记录Exec format error,这与服务文件中的格式无关。

c2e8gylq

c2e8gylq4#

执行开始=/bin/bash... script.sh

相关问题