Java 스크립트의 시스템 서비스는 작업 폴더에서 실행되어야 합니다.

Java 스크립트의 시스템 서비스는 작업 폴더에서 실행되어야 합니다.

다음과 같이 JJS 명령줄 스크립트 파일을 사용하여 시작된 우분투 20.04 서버에 Java 애플리케이션을 설치했습니다.

#!../lib/bin/jre/bin/jjs -scripting function myJAVA(c){ bala bala bala ......}

일반적으로 이 애플리케이션을 실행하려면 다음 2단계를 수행해야 합니다.

# cd /my_app_path/MsgPro/bin
# ./myJAVA start

분명히 bin 폴더로 이동하여 거기에서 스크립트를 실행해야 합니다. 그렇지 않으면 (다른 폴더에서 실행하는 경우) 다음 오류가 발생합니다.

bash: ./bin/msgProcessor: ../lib/bin/jre/bin/jjs: bad interpreter: No such file or directory

나는 Java에 대해 전혀 모르지만 systemctl을 통해 myJAVA.service를 생성하라는 요청을 받았습니다. 그러면 서버가 다시 시작되거나 예기치 않게 종료된 경우 응용 프로그램이 자동으로 다시 시작됩니다.

/etc/system/systemd/myJAVA.service에 이 작업을 수행할 수 있는 단위 파일이 있다는 것을 알고 있지만 어떻게 작동하게 만드는지는 모르겠습니다. 아래는 내 단위 파일입니다.

[Unit]
Description=myJAVA Daemon
After=network-online.target

[Service]
User=root

Environment=PATH=/bin:/sbin:/usr/bin:/usr/sbin
ExecStart=/my_app_path/MsgPro/bin/myJAVA start

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

내 ExecStart 또는 환경이 잘못된 것 같지만 올바른 것이 무엇인지 잘 모르겠습니다.

어떤 도움이라도 주시면 감사하겠습니다.

답변1

스크립트의 첫 번째 줄을 설정합니다.

#!../lib/bin/jre/bin/jjs

상대 경로가 아닌 절대 경로입니다(인터프리터인 경우).
단지 프로그램을 실행하려면 스크립트를 다음과 같이 만드세요.

....../lib/bin/jre/bin/jjs -scripting function myJAVA(c){ bala bala bala ......}

프로그램의 절대 경로를 다시 설정하십시오

답변2

  1. WorkingDirectory=를 사용하여 시뮬레이션 할 수 있습니다 cd <path> && ./script.
  2. WorkingDirectory=일반적으로 쓰기 위치(적용되지 않음)를 지정하지 않는 한 그럴 필요가 없습니다 bin. 절대 경로나 환경 변수에 대한 상대 경로를 사용하도록 스크립트를 변경할 수 있다면 일반적으로 이러한 문제를 많이 해결할 수 있습니다.
  3. 일반적으로 설정이 필요하지 않습니다 $PATH. systemd 단위에서 절대 경로를 사용하십시오. 쉘 스크립트를 실행하면 스크립트는 일반적 PATH으로 .bashrc.
  4. 당신은 필요하지 않습니다 User=root. 이는 이미 systemd 서비스 버스에 암시되어 있습니다.

이 서비스는 귀하에게 적합합니다.

[Unit]
Description=myJAVA Daemon
After=network-online.target

[Service]
WorkingDirectory=/my_app_path/MsgPro/bin
ExecStart=/my_app_path/MsgPro/bin/myJAVA start

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  • 당신은 올바른 길을 가고 있습니다 ExecStart=/absolute/path. 그러면 스크립트가 확실히 실행됩니다.
  • WorkingDirectory=스크립트에서 bin() 과 관련된 항목을 찾을 수 있습니다 ../lib/bin/jre/bin/jjs.

관련 정보