저는 현재 SpringBootApp을 서비스로 실행하는 작업을 진행 중입니다. 가장 큰 문제는 Devops가 아티팩트를 배포하고 서비스를 생성하는 Ansible 스크립트를 변경하는 것을 허용하지 않는다는 것입니다(아래 예 참조).
[Unit]
Description=A Spring Boot application
After=syslog.target
[Service]
User=rating-gateway
ExecStart=/opt/rating-gateway/rating-gateway-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
기술적으로 ExecStart에 java -jar을 추가하면 올바르게 실행되지만 Ansible 스크립트를 편집할 수 없으므로 해결 방법을 찾아야 합니다. 서비스가 java -jar 지시문을 사용하지 않는 일부 가이드를 읽었지만 제대로 작동하려면 무엇이 누락되었는지 잘 모르겠습니다.
도움이 될 것이라고 생각하여 PATH에 Java를 추가했습니다. 그러나 그것은 진실이 아니다.
PATH=/home/rating-gateway/.local/bin:/home/rating-gateway/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-1.el8_3.x86_64/bin
다른 아이디어가 있나요? 이 문제를 해결하시겠습니까?
먼저, 감사합니다.
추신. 저는 개발자이지만 서버에 대한 루트 액세스 권한이 있으므로 어떤 도움이라도 환영합니다.
(추가 정보를 위해 편집) ExecStart 명령에 java -jar이 없는 경우. /var/log/messages에서 다음 오류가 발생합니다.
Mar 30 08:44:44 systemd[134389]: rating-gateway.service: Failed at step EXEC spawning /opt/rating-gateway/rating-gateway-0.0.1-SNAPSHOT.jar: Exec format error
하지만 jar가 구축된 플랫폼과 배포된 서버의 아키텍처는 확인했습니다. 둘 다 x84_64입니다
답변1
다양한 바이너리 형식(binfmt_misc)에 대한 Linux 커널 지원을 사용할 수 있습니다. 이를 통해 해석기(예: Java)를 등록하여 처음 몇 바이트를 기반으로 파일(예: jar 파일)을 실행할 수 있습니다. 보다 https://www.kernel.org/doc/Documentation/admin-guide/binfmt-misc.rst더 많은 정보를 알고 싶습니다.
답변2
귀하의 오류는 시스템이 인터프리터 지시문을 검색하는 jar 파일을 구문 분석하려고 하기 때문에 발생합니다 #!/interpreter
.
rating-gateway-0.0.1-SNAPSHOT.jar
한 가지 방법은 .
따라서 2개의 파일이 생성됩니다.
/opt/rating-gateway/rating-gateway-0.0.1-SNAPSHOT.realjar.jar
- 실제 jar 파일/opt/rating-gateway/rating-gateway-0.0.1-SNAPSHOT.jar
- 다음 내용을 포함하는 간단한 쉘 스크립트:
#!/usr/bin/env sh
java -jar /opt/rating-gateway/rating-gateway-0.0.1-SNAPSHOT.jar