crontab 오류를 기록하는 일반적인 방법은 다음과 같습니다.
1 */8 * * * sh /pseudo_path/test.sh 2>> my_err_log
이것은 깔끔한 명령이지만 오류가 발생한 시간을 기록하지 않으며 스크립트 파일의 경로를 생략합니다.
그래서 오류 로깅 기능을 작성했습니다.
PROGNAME=$(readlink -f "$0")
SCRIPT_ERR_LOG_PATH="/pseudo_path/script_err_log"
error_exit()
{
timestamp="$(date +%Y%m%d-%H:%M:%S)"
x_info=$(echo "Error_${PROGNAME}:Line_${1:-"null"}_")
zeta=$x_info$timestamp
echo "$zeta" >> $SCRIPT_ERR_LOG_PATH
exit 1
}
이 함수는 오류가 발생한 시간과 스크립트의 절대 경로를 기록할 수 있습니다. 하지만 단점은 || error_exit $LINENO
스크립트를 작동시키려면 스크립트의 모든 줄을 추가해야 한다는 것입니다. Vim의 일괄 교체를 사용하는 것이 훨씬 쉬울 수도 있지만 여전히 투박한 솔루션처럼 보입니다.
그렇다면 동일한 작업을 수행하는 더 스마트하고 효율적인 방법이 있습니까?
답변1
trap
내 생각에는 Bash 스크립트를 작성하는 것 같으므로 Bash에 내장된 스크립트를 활용하십시오 . 예를 들어:
#!/bin/bash
# vim: ft=sh:tw=75:fo-=t:fo+=rcq:ai:
function error_trap()
{
local -ir __exit_code__=${1:-$?}
local __timestamp__
# Reset the ERR sigspec to its original disposition.
trap - ERR
__timestamp__=$( date --rfc-3339=seconds --date=now )
# Hint...
#declare -p BASH_LINENO
#declare -p BASH_COMMAND
echo "[${__timestamp__}] (Line: ${BASH_LINENO[0]}) :: ERROR :: ${BASH_COMMAND}" >&2
exit ${__exit_code__}
}
# Register function 'error_trap' as the trap handler for
# the ERR (error) sigspec.
trap "{ error_trap; }" ERR
# Try it out; deliberately crash-and-burn this script.
ls this-does-not-exist
이 스크립트를 호출할 때 표시되는 출력은 다음과 같습니다.
ls: cannot access this-does-not-exist: No such file or directory
[2015-07-30 01:36:32-05:00] (Line: 24) :: ERROR :: ls this-does-not-exist
답변2
logger
생성할 것으로 예상되는 로그 정보의 양에 따라 표준 도구를 사용하여 사용자 시스템 로그에 기록하는 것이 좋습니다 /var/log
.
1 */8 * * * /path/to/myprog 2>&1 | logger -p user.debug -t 'myprog'
/var/log/debug
다음은 내 Debian 기반 시스템에 작성된 출력의 예입니다.
Jul 31 00:17:09 myserver myprog: test message with user.debug
다양한 시설/레벨 쌍을 사용할 수 있습니다. 또는 user.notice
중 하나를 고려해 볼 수도 있습니다 . 이들 중 일부는 로 쓰여질 수도 있습니다 .user.info
user.debug
/var/log/messages
/var/log/syslog
차별화하고 싶다면표준 출력그리고표준 에러직장 에서 cron
그냥 보내세요표준 에러의 경우 logger
다음과 같은 구성을 사용할 수 있으며 다른 사람들도 이를 개선할 것이라고 확신합니다.
1 */8 * * * ( /path/to/myprog 2>&1 1>&3 | logger -p user.debug -t 'myprog' ) 3>&1