실패할 때마다 명령을 실행하는 방법은 무엇입니까?

실패할 때마다 명령을 실행하는 방법은 무엇입니까?

나는 명령이 실패할 때마다(내 VPS에 HTTP 요청을 보냄으로써) 내가 몇 번이나 실수를 했는지 확인하려고 노력하고 있습니다.

나는 시도했다: some_command || curl <my-vps>. 더 좋은 방법이 있나요?

답변1

오류 처리를 위한 트랩을 생성할 수 있습니다.

예를 들어:

trap 'echo "Error: $? occurred" >> log.txt' ERR

some_command
some_bad_command
some_command

또는 아래와 같이 스크립트에서 사용할 수 있습니다.

#!/bin/bash

trap 'error_handler $? $LINENO' ERR

error_handler () {
    echo "Error: $1 occurred on line $2"
}

# rest of code...

귀하의 사용 사례에 대한 참고 사항으로 다음과 같이 할 것입니다.

trap 'curl <my-vps> --retry 0 --silent -o /dev/null &' ERR

이렇게 하면 작업이 자동으로 수행되며 오류가 발생하면 다른 컬이 시작되지 않습니다.

답변2

[[ "$(some-command-here)" ]] || { >&2 curl http://myvps.com; exit 1;}

명령이 통과하면 컬이 실행되지 않습니다. 명령이 실패하면 컬이 실행됩니다

이를 테스트하려면 다음을 수행할 수 있습니다.

[[ "$(ls -l)" ]] || { >&2 curl -v http://google.com; exit 1;}

이 경우 ls -l실행 중인 명령은 분명히 통과하지만 컬은 실행되지 않습니다.

[[ "$(lsxx -l)" ]] || { >&2 curl -v http://google.com; exit 1;}

이 경우 내 명령이 중단되어 실패하지만( lsxx종료하지 않고) 컬이 실행됩니다.

관련 정보