쉘 스크립트를 사용하여 크론 작업을 모니터링하고 싶습니다. 그러나 마지막 명령의 종료 코드가 포함된 변수를 사용하면 항상 "0"이 됩니다. 이것은 cron 작업 후에 이 스크립트를 실행하고 있고 "종료 코드"가 "0"(스크립트 시작) 값을 갖기 때문이라고 생각합니다. 어떻게 스크립트 시작을 무시하고 "종료 코드" 변수를 사용할 수 있습니까? 이전 크론 작업?
$ ls foo ;에코 $? ls: foo에 접근할 수 없습니다: 해당 파일이나 디렉터리가 없습니다 2
$ ls foo ls: foo에 접근할 수 없습니다: 해당 파일이나 디렉터리가 없습니다 $ sh test.sh 0
내 test.sh:
#!/bin/bash 통지() { 종료 코드=$? ${EXIT_CODE} 에코 } 통지하다
답변1
종료 코드를 스크립트에 매개변수로 전달할 수 있습니다.
ls -l /tmp/filethatdoesnotex.ist
/usr/local/bin/test.sh $?
test.sh 사용:
RESULT=$1
if [ $RESULT -gt 0 ]
then
echo "something bad happened and ended with result $RESULT" >&2
else
echo "everything is fine, sleep on"
fi
답변2
명령의 종료 상태는 시스템 전체에 저장되지 않습니다. 명령을 실행하는 셸에 의해 로컬로 저장됩니다. 쉘이 다른 명령을 실행하면 이전 종료 상태가 손실됩니다.
쉘은 마지막 명령의 상태로 종료됩니다. 따라서 쉘 스크립트의 마지막 명령이 실패하면 쉘의 종료 상태는 0이 아닙니다.
cron 작업으로 인한 종료 상태가 다른 임의의 셸 세션이나 스크립트에서 어떻게 결정될 수 있다고 생각하는지 모르겠습니다. 20개의 작업이 병렬로 실행되는 경우 어떤 종료 상태가 어떤 작업에 속하는지 알고 싶으십니까? 할 수 없습니다.
종료 상태를 일부 상태 파일에 저장하려면 cron 작업을 수정해야 합니다. 그러면 나중에 해당 상태 파일을 읽을 수 있습니다.