cron 작업에서 로컬 받은 편지함으로 전송된 각 이메일을 다른 이메일에 기록하려고 합니다.txt문서. 라인을 사용할 때
mail | grep cron > cron_mail.txt
작업이 중지되지 않고 빈 공간이 생성됩니다.cron_mail.txt.
이 문제를 어떻게 해결할 수 있나요? 아니면 bash에서 더 쉽게 해결할 수 있는 방법이 있나요?
답변1
메일은 표준 오류 스트림으로 출력되는 것으로 보이므로 표준 출력만 파이프되기 때문에 grep으로 파이프되지 않습니다.
노력하다mail 2>&1 | grep cron > cron_mail.txt
2는 표준 오류 스트림의 파일 설명자입니다. 위 명령을 사용하면 표준 출력으로 리디렉션된 다음 파이프됩니다.
답변2
로컬 메일 백엔드가 Berkeley 메일박스 파일인 경우 다음을 시도해 보세요.
grep '^From cron ' "$MAIL"
From
이는 Berkeley mbox 파일이 각각의 새 메시지 앞에 구분선으로 (보낸 사람의 봉투 주소) 로 시작하는 줄과 두 개의 공백(일반적으로 메시지 도착 시간이 뒤따름)을 사용한다는 사실에 의존합니다 . (결과적으로 메시지 본문은 From
줄 시작 부분 어디에도 5자를 포함할 수 없습니다.) cron
예를 들어 데몬의 메시지에 FQDN 도메인 이름이 포함되어 있는 경우 정규식을 조정해야 합니다.
Berkeley mbox는 한때 어디에나 존재했지만 지금은 많은 시스템이 다른 메일함 형식을 사용하며 그 중 다수는 단일 플랫 파일이 아닌 폴더 기반입니다. maildir(특히 IMAP 메일함의 일반적인 형식)의 경우 다음을 시도하십시오.
find new cur tmp -type f -exec grep -m 1 '^From:' /dev/null | grep cron
각 메시지의 헤더를 확인합니다 From:
(전혀 메시지 헤더가 아닌 유사하게 표시된 Berkeley 구분 기호와는 다름). 확인하려는 폴더에서 실행하거나, 디렉토리 매개변수에 , 및 하위 디렉토리 new
에 대한 전체 경로를 포함할 수 있습니다 cur
.tmp