고쳐 쓰다

고쳐 쓰다

MTA내 데스크탑에는 설치되어 있지 않습니다.

스크립트에 문제가 발생할 때마다 cronjob로그에 다음이 표시됩니다.

CRON:  (CRON) info (No MTA installed, discarding output)

실행되어야 하는 스크립트가 cron오류를 생성하고 cron오류를 이메일로 보내려고 합니다.

syslog하지만 내 로그에서 위와 같은 메시지가 정상적으로 기록된 오류를 보고 싶습니다 info.

cron잊어버리고 MTA모든 것(오류 포함)을 로컬에 기록하는 것이 가능합니까 syslog?

고쳐 쓰다

@roaima의 솔루션은 원래 문제에 완벽하게 작동했습니다. 그러나 나는 파이프 에서 파이프 로 , (둘 다?) 파이프에서 로 가는 cronjob좀 더 복잡한 구문이 필요하다는 것을 깨달았습니다 .stdoutcommand1command2stderrcommand3

구체적인 예는 다음과 같습니다(단순화).

0 * * * * mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" | logger -t mysqldump -p cron.err

mysqldump위의 예에서는 stdout을 으로 보내야 하며, 오류가 발생 하는 ifne xz경우에만 로거로 파이프해야 합니다.mysqldumpifne xz

dash/bin/sh이 구문은 ( ) 내에서 작동 해야 합니다 .

답변1

로거 하위 시스템을 사용할 수 있습니다. 설치 여부에 따라 두 가지 변형이 있습니다 systemd.

  1. 다음과 함께 사용 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
    
  2. 다음과 함께 사용 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

관련 정보