programing

Linux 서비스를 쓸 때 Exec 포맷 오류가 나타나는 이유는 무엇입니까?

megabox 2023. 3. 5. 09:42
반응형

Linux 서비스를 쓸 때 Exec 포맷 오류가 나타나는 이유는 무엇입니까?

springboot web app을 서비스로 전개하기 위해 Linux 서비스를 작성하고 있습니다.여기 서비스 파일입니다.springboot.service

[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

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

대본에 셰방을 추가하다

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

및 실행 권한

chmod +x spring-start.sh

spring-start.sh 는, 스프링 부트시에 Exec Start 를 명시할 필요가 있는 bash 에 의해서 실행됩니다.서비스 파일: ExecStart=/bin/bash/home/ubuntu/spring-start.

검색하시는 분들을 위한 또 다른 답변입니다!스크립트가 아닌 바이너리를 호출하는 경우 바이너리가 올바른 아키텍처(arm/x86)에 맞게 구축되어 있는지 확인하고 직접 실행할 수 있는지 확인하십시오.이 경우 문제가 발생할 수 있습니다.

이 바이너리는 x86용으로 작성되었으며, 암으로 실행했을 때 콘솔 오류는 다음과 같습니다.unexpected )그러나 이로 인해 바이너리가 에러를 일으켜 systemd가 로그에 기록됩니다.Exec format error서비스 파일의 형식과는 상관이 없습니다.

ExecStart=/bin/bash... 스크립트.

언급URL : https://stackoverflow.com/questions/57025605/why-am-i-getting-exec-format-error-when-i-am-writing-my-linux-service

반응형