서버가 실패할 경우 crontab을 사용하여 서버를 자동으로 다시 시작하는 방법은 무엇입니까?

서버가 실패할 경우 crontab을 사용하여 서버를 자동으로 다시 시작하는 방법은 무엇입니까?

Ubuntu 10.10에서 이와 같이 실행한 다음 백그라운드에서 프레젠테이션 서버를 시작하는 jar 파일이 있습니다.

nohup java \
    -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
    -c file --fsconfigdir /opt/exhibitor/conf \
    --hostname machineA > exhibitor.out &

crontab이제 전시자 서버가 실행 중인지 확인 하려고 합니다 . 실행 중이 아니면 다시 시작하여 crontab을 사용하기로 결정하고 다음 단계에 따라 crontab을 설정했습니다.

  1. 를 실행하여 새로운 crontab을 생성했습니다 crontab -e.
  2. 방금 연 파일에 다음 줄을 추가하세요.

    */5 * * * * pgrep -f exhibitor || nohup java -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out
    
  3. 파일을 저장하고 편집기를 종료합니다.

그래서 내 crontab이 제대로 작동하는지 확인하기 위한 테스트 목적으로 먼저 다음과 같이 전시 서버를 시작했습니다.

$ nohup java \
    -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
    -c file --fsconfigdir /opt/exhibitor/conf \
    --hostname machineA > exhibitor.out &
[1] 14401

$ nohup: ignoring input and redirecting stderr to stdout

그런 다음 위에 표시된 단계에 따라 crontab을 설정했습니다. 이 작업을 수행 한 후 kill -9 14401crontab에 의해 전시자 서버가 자동으로 다시 시작되었는지 확인할 수 있었습니다. 분명히 시작되지 않았고 오류도 표시되지 않았습니다. 아래는 로그입니다 -

$ sudo tail -f /var/log/syslog
Nov  5 17:21:45 machineA crontab[12755]: (cronusapp) BEGIN EDIT (cronusapp)
Nov  5 17:23:17 machineA crontab[12755]: (cronusapp) END EDIT (cronusapp)
Nov  5 17:25:01 machineA CRON[13671]: (root) CMD (  puppet apply /etc/puppet/manifests/motd-stats.pp >>$PUPPET_LOG 2>&1)
Nov  5 17:25:01 machineA CRON[13672]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Nov  5 17:25:01 machineA CRON[13673]: (cronusapp) CMD (pgrep -f exhibitor || nohup java -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out)
Nov  5 17:25:01 machineA postfix/pickup[2345]: 2B0D8819F9: uid=78402 from=<cronusapp>
Nov  5 17:25:01 machineA postfix/cleanup[13679]: 2B0D8819F9: message-id=<[email protected]>
Nov  5 17:25:01 machineA postfix/qmgr[25623]: 2B0D8819F9: from=<[email protected]>, size=814, nrcpt=1 (queue active)
Nov  5 17:25:01 machineA postfix/local[13681]: 2B0D8819F9: to=<[email protected]>, orig_to=<cronusapp>, relay=local, delay=0.11, delays=0.07/0/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox)
Nov  5 17:25:01 machineA postfix/qmgr[25623]: 2B0D8819F9: removed

내가 여기서 뭘 잘못하고 있는 걸까? 내 crontab이 작동하지 않는 이유는 무엇입니까? 어떤 이유로든 전시업체 서버가 다운되면 자동으로 다시 시작하면 됩니다.

답변1

java/usr/bin디렉토리 에 있나요? 기본적으로 crontab최소값이 있습니다 PATH. crontab에서 설정 JAVA_HOME하고 다음을 수행해야 할 수도 있습니다.PATH

*/5 * * * * JAVA_HOME=/opt/java/latest;export JAVA_HOME; \
    PATH=$PATH:$JAVA_HOME/bin; \
    pgrep -f exhibitor || nohup java \
    -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
    -c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out

관련 정보