크론 작업에 확장된 로깅을 사용할 수 있나요?

크론 작업에 확장된 로깅을 사용할 수 있나요?

아래에 3개의 스크립트가 있습니다 /etc/cron.daily. 내 cron 로그는 을 사용하고 있습니다 /var/log/cron. 아래는 위에서 실행된 cron에 대한 항목입니다.

(root) CMD (run-parts /etc/cron.hourly)

이 cron 내의 스크립트를 stdout사용할 수 없습니다. 이는 명령이 폴더에서 실행되었음을 나타냅니다.stderrrun-parts

3개의 스크립트가 실행될 때 어떤 일이 발생하는지 기록하는 데 도움이 되는 트릭이 있나요?

cron.daily참고: 출력 및 오류를 로그 파일로 리디렉션하는 스크립트를 편집할 수 없습니다 .

답변1

Unix에서 메일 시스템은 시스템 알림이 사용자에게 전달되는 방식입니다. Windows와 비슷하게 생각하면 됩니다. 알림이 필요한 경우 팝업 메시지와 함께 작업 표시줄에 무언가가 나타납니다. 이론적으로 cronjob은 출력을 생성해서는 안 되기 때문에(아무도 출력을 볼 수 없으므로) 모든 출력(stdout 또는 stderr)은 잠재적으로 버그나 문제를 나타내는 것으로 간주되므로 cronjob 소유자에게 이에 대한 메시지가 표시됩니다. 확인하다.

따라서 모든 출력(stdout 및 stderr)은 로컬 메일 시스템을 통해 cronjob 소유자에게 전송됩니다. 소유자가 개인 계정이 아닌 경우 별칭을 설정하여 실제 이메일 계정으로 릴레이하도록 로컬 MTA에 지시할 수 있습니다. 예를 들어 다음을 추가합니다 /etc/aliases.

root: [email protected]

newaliases그런 다음 명령을 실행합니다 (메일 별칭 데이터베이스 재구축). 그 후 회사 이메일 받은 편지함에서 루트로부터 이메일을 받기 시작했습니다.

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

그 모든 영광을 보아라

이는 다소 일반적인 방법입니다(시스템에서 알림 이메일을 보내도록 함). 알림을 처리하는 다른 방법이 있습니다. 몇 가지 대안:

이메일을 특정 파일에 저장하려면 별칭을 수정하세요.

root: /var/log/rootMails

메시지를 스크립트로 파이프합니다.

root: |/usr/local/bin/filterMail

별칭 문제를 해결하는 또 다른 방법은 MAILTO=많은 cron 데몬에서 지원하는 사용자의 crontab 옵션을 사용하는 것입니다. 이 구현이 수행하는 작업은 사용자의 사서함에 들어갈 알림이 아니라 특정 사용자 집합으로부터만 알림을 받고 싶은 경우 aliases더 나은 옵션일 수 있습니다 .

다른 것들도 많이 있을 거라 확신하지만, 첫 번째나 마지막 것을 하고 싶을 수도 있습니다.

답변2

cron을 실행하고 -s메일을 보내는 대신 syslog를 사용하도록 선택할 수 있습니다. 이는 적어도 RHEL 및 그 파생 제품인 FreeBSD 및 MacOS에 적용됩니다.

답변3

Bash 스크립트에 자신을 기록할 수 있습니다.

logfile=/var/log/mine/whatever.log

log () {
    timestamp=$(date +'%F %T')
    echo -e "$timestamp $1" >> $logfile
    shift
    for a; do
        echo -ne "$a" >> $logfile
    done
}    

log "Hello world.\nAnd so on..."

[...]

기록하려는 출력이 포함된 명령을 실행하는 경우:

somecommand 2>&1 >> $logfile

또한 메시지와 오류를 시스템 로거(참고자료 참조)로 보내고 man loggersyslog 구성을 통해 정렬할 수도 있습니다.

관련 정보