쉘 스크립트를 사용하여 시작해야 하는 Java 서버 프로그램을 실행하고 있습니다. Java 프로그램이 충돌하거나 수동으로 중지된 경우 스크립트는 Java 프로그램을 다시 시작해야 합니다.
이 스크립트를 온라인에서 찾았습니다.
while true
do
java -jar program.jar
done
하지만 이것은 내 Debian 7 컴퓨터에서는 작동하지 않는 것 같습니다.
./start.sh: line 4: syntax error: unexpected end of file
이는 "Linux" 스크립트로만 출시되었습니다. 데비안에서 어떻게 작동하게 할 수 있나요? 아 예, 스크립트가 아닌 콘솔에 액세스할 수 있는 방법이 없는 한 정기적으로 콘솔에 액세스해야 하기 때문에 스크립트에서 프로그램을 시작하는 것이 중요합니다.
답변1
이것은 완벽하게 유효한 스크립트입니다. 어디서나 잘 작동합니다. 구문 오류가 발생하는 경우 스크립트를 복사/붙여넣을 때 구문 오류가 발생했거나 Thomas가 주석에서 추측한 대로 파일에서 잘못된 줄 종결자를 사용했기 때문입니다.
od
아래와 같이 다음 명령을 사용하여 줄 종결자를 확인할 수 있습니다 .
$ od -a foo.sh
0000000 w h i l e sp t r u e nl d o nl sp sp
0000020 sp j a v a sp - j a r sp p r o g r
0000040 a m . j a r nl d o n e nl
0000054
여기에서 내 시스템의 스크립트가 개행 문자를 사용하고 있음을 볼 수 있습니다(즉 nl
, 출력에서 바로 뒤). t r u e
캐리지 리턴만 보이는 경우:
0000000 w h i l e sp t r u e cr d o cr sp sp
또는 캐리지 리턴/라인 피드 조합:
0000000 w h i l e sp t r u e cr nl d o cr nl
그렇다면 문제를 해결해야 합니다.
sleep
모든 것이 제대로 작동하면 다음과 같이 스크립트에 명령을 추가하는 것이 좋습니다 .
while true
do
java -jar program.jar
sleep 1
done
일시 중지가 없는 긴밀한 루프는 즉시 충돌이 발생 하면 program.jar
많은 CPU를 소비할 수 있습니다 . 작은 일시 중지를 도입하면 이 특정 문제가 크게 해결됩니다.
답변2
Lasquez의 답변은 잘 작성되고 광범위합니다. 그에 따라 투표했습니다.
간단히 설명하자면:
그렇다면 문제를 해결해야 합니다.
Windows CR을 Linux/Unix LF로 변환하는 방법에는 여러 가지가 있습니다. 다음은 몇 가지입니다:
사용 tr
:
tr -d '\r' < infile > outfile
사용 sed
:
sed 's/^M$//' infile > outfile
마지막으로, Debian을 사용하고 있으므로 dos2unix
available이라는 패키지가 있을 것입니다. 설치해 보면 매우 간단합니다.
dos2unix myfile