쉘 스크립트로 시작해야 하는 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
larsks의 답변은 잘 작성되고 광범위합니다. 이에 따라 찬성표가 주어졌습니다.
다음 사항에 대해 간단히 알아보세요.
그러면 그것을 고쳐야 할 것입니다.
Windows CR을 Linux/Unix LF로 변환하는 방법은 다양합니다. 다음은 몇 가지입니다:
사용 tr
:
tr -d '\r' < infile > outfile
사용 sed
:
sed 's/^M$//' infile > outfile
마지막으로 Debian을 사용하고 있으므로 dos2unix
available이라는 패키지가 있을 수 있습니다. 설치하면 다음과 같이 간단합니다.
dos2unix myfile