저는 msmtp를 사용하여 회사에 설정한 일부 RPi 키오스크에 이메일 알림을 생성하고 있습니다. 불행하게도 이메일 알림에 로그 파일의 마지막 5줄을 포함하려고 하면 msmtp가 줄 바꿈을 올바르게 처리하지 못하고 오류가 발생합니다. 모든 것 한 줄의 텍스트로 인쇄합니다. 로그 파일의 모든 줄에 \n이 포함되어 있으면 이메일 경고에 올바르게 출력됩니다.
이 명령의 기본 예는 다음과 같습니다.
echo -e "This is a test. $(tail -5 /var/log/syslog)" | msmtp @domain
syslog를 에코하지만 msmtp
개행 문자를 처리할 수 없는 것처럼 보이기 때문에 모두 텍스트로 둘러싸여 있습니다. syslog를 수동으로 편집하고 \n
각 줄의 끝에 추가하면 올바르게 인쇄됩니다.
\n
로그 파일의 각 줄 끝에 추가할 sed 또는 awk 의 올바른 구문은 무엇입니까?
답변1
이것은 매우 간단합니다. 입력은 msmtp
헤더와 본문이 포함된 올바른 형식의 이메일 메시지여야 합니다. 결국 /usr/{bin,lib}/sendmail
, 헤더를 본문에서 분리하지 않았거나 실제로 헤더를 전혀 생성하지 않았습니다. 귀하의 syslog 라인은 (매우 이상한) 헤더로 처리됩니다.
머리글. 새로운 팀. 몸. 그것을 생성하십시오.
답변2
내 생각에는 메일 도구가 기다리고 있는 것 같습니다 \r\n
. 이는 Microsoft 제품에 사용되는 줄 끝이기도 합니다. (그들(또는 CP/M 작성자)은 프린터로 보낼 때 변환하는 방법을 몰랐기 때문에 해결 방법으로 모든 파일에 이 줄 끝을 지정했습니다. msmtp
나름대로의 이유가 있을 수 있습니다.)
그러니 그것을 파이프로 연결해 보십시오 unix2dos
.
즉
echo -e "This is a test. $(tail -5 /var/log/syslog)" | unix2dos | msmtp @domain
또한 로그를 해석하기 위해 에코를 사용할 계획이 아니라면. 내가 할게
{
echo -n "This is a test. "
tail -5 /var/log/syslog
} |
unix2dos |
msmtp