cron 작업을 사용하여 메일 폴더 정리

cron 작업을 사용하여 메일 폴더 정리

스팸 암살자스팸을 "학습"하는 기능이 있습니다. 각 사용자의 메일 폴더에는 .spam 폴더가 있으며 모든 스팸을 이 폴더로 이동하라는 안내를 받게 됩니다. (사용자는 IMAP을 사용하고 있습니다.) 각 계정의 .spam 폴더 내용을 다음으로 공급하는 cron 작업을 설정했습니다.SaLearn.

02 02 * * * sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/*/*/.spam/{cur,new} 

cron 확인 이메일에 따르면 이는 예상대로 작동합니다.

이제 sa-learn 명령이 성공적으로 완료되면 .spam 폴더의 내용이 자동으로 삭제되기를 원합니다. 위의 cron 작업 끝에 다음을 추가할 수 있다고 생각하는 것이 맞습니까?

&& rm ~/mail/*/*/.spam/{cur,new}

이게 맞는 것 같나요?

참고: 여러 cPanel 리셀러 호스팅 계정에서 사용하기 위해 테스트 중입니다. 쉘 액세스 권한이 없습니다.


업데이트 1Celada의 답변과 의견은 다음과 같습니다.

이를 수행하는 방법은 각 메시지를 사용자가 제어하고 IMAP 서버의 영향을 받지 않는 다른 디렉터리로 자동으로 이동한 다음 해당 위치에서 메시지를 처리하고 삭제하는 것입니다. 다행히도 이러한 종류의 원자 이동을 허용하는 Maildir을 사용하고 있습니다.

어때요?

mkdir -p /tmp/sa_tmp 
  && mv ~/mail/*/*/.spam/{cur,new} /tmp/sa_tmp
  && sa-learn -p ~/.spamassassin/user_prefs --spam /tmp/sa_tmp
  && rm -rf /tmp/sa_tmp

mktemp디렉토리를 잊어버리면 다음에 실행할 때 삭제되도록 의도적으로 사용하지 않은 상태로 두었습니다 .


업데이트 2Xhienne는 다음과 같이 댓글을 달았습니다.

cur 및 new 디렉토리를 이동하는 것이 좋은 생각인지 확실하지 않습니다 => 해당 내용을 이동합니다. 또한 new 및 cur라는 이름의 많은 디렉터리를 동일한 대상으로 이동하기 때문에 이름 충돌이 발생합니다.

파일 이름 충돌을 피하는 방법을 잘 모르겠습니다.

마지막으로 /tmp로 이동한다는 것은 다른 파티션으로 이동하는 것을 의미할 수 있으며, 이로 인해 추가 I/O가 발생하고 디스크 공간이 부족할 수 있습니다(/tmp는 때때로 작은 독립 파티션입니다) => ~/ 특수 폴더 mail/과 같은 것으로 이동하는 것이 좋습니다. .sa - 마지막에 삭제될 수 있음을 이해합니다.

mkdir -p ~/mail/.sa-learn 
  && mv ~/mail/*/*/.spam/{cur,new}/* ~/mail/.sa-learn
  && sa-learn -p ~/.spamassassin/user_prefs --spam ~/mail/.sa-learn
  && rm -rf ~/mail/.sa-learn

업데이트 3:

new폴더가 없으면 작동하지 않을 것 같아요. 오류가 발생합니다.

mv: cannot stat `/home/username/mail/*/*/.spam/new/*': No such file or directory

"무시" 스위치가 없는 것 같습니다 mv. 어떤 아이디어가 있나요?

답변1

당신이 제안한 솔루션은 흥미 롭습니다. 실행 중 또는 실행 중에 새 메시지가 추가(또는 삭제 또는 변경)되지 않는다고 보장할 수 없기 때문에 sa-learn흥미롭고 불행한 일이 많이 발생할 수 있습니다. 그 중 가장 분명한 것은 메시지를 제공하지 않고 메시지를 삭제할 수 있다는 것입니다. .sa-learnrmsa-learn

이를 수행하는 방법은 각 메시지를 사용자가 제어하고 IMAP 서버의 영향을 받지 않는 다른 디렉터리로 자동으로 이동한 다음 해당 위치에서 메시지를 처리하고 삭제하는 것입니다. 다행히도 이러한 종류의 원자 이동을 허용하는 Maildir을 사용하고 있습니다.

관련 정보