Cron 작업이 실행되지 않음(pgrep 문제)

Cron 작업이 실행되지 않음(pgrep 문제)

bash 쉘 스크립트를 시작하는 cron 작업을 매분 실행합니다.

# Automatically reboot the server if it goes down
* * * * * /root/auto-restart.sh

스크립트를 수동으로 실행할 수 있지만 크론 작업을 통해 실행하려고 하면 실행되지 않습니다. 조금 디버깅한 결과 다음 명령이 원인이라는 것을 알았습니다.

pgrep -fcl auto-restart.sh

전체적으로 수동으로 실행하면 명령이 올바른 값을 반환하고 auto-restart.sh는 스크립트가 현재 실행 중인 경우에만 나열됩니다.

그러나 cron 작업이 시작되면 다음과 같은 출력이 표시됩니다 pgrep -fl auto-restart.sh(실행 시).

3110 sh
3111 auto-restart.sh

이것은 내가 사용하는 코드입니다:

scriptcheck=`pgrep -fcl auto-restart.sh`
if [ $scriptcheck -gt 1 ]; then
    echo "auto-restart.sh script already in use. Terminating.."
    #cron job debugging..
    echo "[DEBUG] scriptcheck returning greater than 1" > /tmp/debug.output
    echo "[DEBUG] Value of scriptcheck: ${scriptcheck}" >> /tmp/debug.output
    echo "[DEBUG] contents:" >> /tmp/debug.output
    pgrep -fl auto-restart.sh >> /tmp/debug.output
    exit
fi

전체 스크립트는 여기에 있습니다:https://pastebin.com/bDyzxFXq

답변1

cron실행하면 다음을 사용하여 실행됩니다 /root/auto-restart.sh. 옵션을 사용했기 때문에 실행 중인 프로세스의 명령줄 어디에서나 일치하므로 일치합니다. 후자는 의 출력에서 ​​정상적으로 나타납니다.shsh -c /root/auto-restart.sh-fpgreppgrepauto-restart.shauto-restart.shsh -c /root/auto-restart.shshpgrep -l

pgrep -c auto-restart.sh

당신이 원하는 행동을 줄 것입니다. ( -l말이 안 되니까 포기했어요 -c.)

(귀하의 서버에는감시 타이머, 이것이 더 적절할 수 있습니다. 비록 서버가 cron 작업을 실행할 수 있을 만큼 충분히 잘 실행되고 있지만 다른 방법으로는 다운된 것으로 간주된다면 감시 장치가 작동하지 않을 것이라고 상상합니다. )

관련 정보