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