아래에 3개의 스크립트가 있습니다 /etc/cron.daily
. 내 cron 로그는 을 사용하고 있습니다 /var/log/cron
. 아래는 위에서 실행된 cron에 대한 항목입니다.
(root) CMD (run-parts /etc/cron.hourly)
이 cron 내의 스크립트를 stdout
사용할 수 없습니다. 이는 명령이 폴더에서 실행되었음을 나타냅니다.stderr
run-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 logger
syslog 구성을 통해 정렬할 수도 있습니다.