나는 명령이 실패할 때마다(내 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
종료하지 않고) 컬이 실행됩니다.