MTA
내 데스크탑에는 설치되어 있지 않습니다.
스크립트에 문제가 발생할 때마다 cronjob
로그에 다음이 표시됩니다.
CRON: (CRON) info (No MTA installed, discarding output)
실행되어야 하는 스크립트가 cron
오류를 생성하고 cron
오류를 이메일로 보내려고 합니다.
syslog
하지만 내 로그에서 위와 같은 메시지가 정상적으로 기록된 오류를 보고 싶습니다 info
.
cron
잊어버리고 MTA
모든 것(오류 포함)을 로컬에 기록하는 것이 가능합니까 syslog
?
고쳐 쓰다
@roaima의 솔루션은 원래 문제에 완벽하게 작동했습니다. 그러나 나는 파이프 에서 파이프 로 , (둘 다?) 파이프에서 로 가는 cronjob
좀 더 복잡한 구문이 필요하다는 것을 깨달았습니다 .stdout
command1
command2
stderr
command3
구체적인 예는 다음과 같습니다(단순화).
0 * * * * mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" | logger -t mysqldump -p cron.err
mysqldump
위의 예에서는 stdout을 으로 보내야 하며, 오류가 발생 하는 ifne xz
경우에만 로거로 파이프해야 합니다.mysqldump
ifne xz
dash
/bin/sh
이 구문은 ( ) 내에서 작동 해야 합니다 .
답변1
로거 하위 시스템을 사용할 수 있습니다. 설치 여부에 따라 두 가지 변형이 있습니다 systemd
.
다음과 함께 사용
systemd
-systemd-cat
echo This is a test with systemd-cat | systemd-cat -t mytest -p info
이는 메시지를 로거(참고자료 참조
journalctl
)에 기록하고 출력 등을 찾을 수 있는 레거시 시스템 로깅 하위 시스템에도 기록합니다/var/log/syslog
.journalctl -t mytest -- Logs begin at Thu 2020-05-21 07:41:00 UTC, end at Mon 2020-06-01 13:34:56 UTC. -- Jun 01 13:34:56 pi mytest[24236]: This is a test through systemd-cat
다음과 함께 사용
syslog
-logger
echo This is a test with logger | logger -t mytest -p local0.info
rsyslog.conf
이는 출력/var/log/syslog
등을 찾을 수 있는 syslog 하위 시스템(참조 또는 유사)을 통해 메시지를 작성합니다 .tail /var/log/syslog [...] Jun 1 13:34:56 pi mytest[24236]: This is a test through systemd-cat Jun 1 13:38:28 pi mytest: This is a test through logger
이러한 로깅 옵션 중 하나를 사용하려면 작업에 연결하고 예제에서 cron
태그 이름( myscript
) 및 우선순위( )를 조정하기만 하면 됩니다.info
0 * * * * /path/to/script 2>&1 | systemd-cat -t myscript -p info
이제 구체적인 예를 제공했으므로 원하는 위치에표준 출력대상 데이터 파일에 쓰지만 기록하고 싶습니다.표준 에러, 이것을 사용할 수 있습니다
0 * * * * ( mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" ) 2>&1 | logger -t mysqldump -p cron.err