삭제하고 다시 만든 후 Postfix가 더 이상 /var/log/mail에 기록되지 않습니까?

삭제하고 다시 만든 후 Postfix가 더 이상 /var/log/mail에 기록되지 않습니까?

실수로 파일을 삭제했습니다 /var/log/mail. 그때까지는 postfix를 사용하여 모니터링할 수 있었습니다. 이제 /var/log/mail파일이 새 로그 메시지로 업데이트되지 않기 때문에 Postfix가 로그를 보내지 않는 것 같습니다 .

답변1

mail.log 파일을 삭제하면 rsyslog(우분투에서)가 파일 핸들을 해제합니다. Ubuntu에서 다시 제대로 작동하게 하려면 다음을 제공하십시오.

sudo service rsyslog restart

그러면 새 파일이 생성될 뿐만 아니라 로그에 쓰기도 시작됩니다.

답변2

빈 파일을 생성한 후에도

touch /var/log/mail

syslog를 다시 시작해야 합니다.

service syslog restart

그런 다음 이득을 기록하십시오 :)

답변3

이는 시스템 로그의 오류이지만 파일이 열려 있는 동안 프로그램이 파일을 삭제할 때 발생하는 일반적인 문제를 보여줍니다. "rm"을 수행하면 디렉터리 항목은 삭제되지만 기본 파일은 삭제되지 않습니다. 운영 체제는 파일에 대한 참조 카운트를 유지하며 참조 카운트가 0에 도달할 때까지 기본 파일 데이터를 실제로 삭제하지 않습니다. 일반 파일의 경우 열리지 않은 파일의 참조 횟수는 1(디렉토리 항목)입니다. 파일이 열리면 개수가 2로 증가합니다. 두 번째 프로그램이 동일한 파일을 열면 개수는 3개로 늘어납니다. 지금 디렉토리 항목을 삭제하면 개수가 2로 감소합니다. 즉, 파일은 익명(이름 없음)이지만 해당 파일을 연 두 프로그램이 모두 닫힐 때까지 삭제되지 않습니다. 이 경우 운영 체제는 기본 항목을 삭제합니다. 파일과 관련된 디스크 저장소입니다.

/var/log/mail을 삭제해도 시스템 로거는 계속 쓰기 위해 파일을 엽니다. 새 /var/log/mail을 생성하면 시스템 로거가 현재 쓰고 있는 파일과 다른 파일을 가리킵니다. 모든 것을 일관되게 만드는 유일한 방법은 시스템 로거를 다시 시작하는 것입니다. 원래 시스템 로거가 종료되면 디렉토리 항목을 삭제한 익명 메일 로그를 포함하여 이와 관련된 모든 파일이 닫힙니다. 시스템 로거를 다시 시작하면 로그 메시지를 작성해야 할 때 /var/log/mail이 다시 열리고 그 이후에는 열린 상태로 유지됩니다.

이것이 흔히 발견되는 또 다른 방법은 실행 중인 프로그램이 전체 디스크를 파일 데이터로 채우는 경우입니다. 사용자가 매우 큰 파일을 삭제했지만 파일이 여전히 존재하고 디스크 공간을 차지하고 있기 때문에 디스크 공간이 해제되지 않습니다. 디렉토리 항목이 삭제되었습니다. 프로그램이 종료되면(사용자가 프로그램을 종료하거나 프로그램 자체를 종료하여) 파일의 참조 카운트가 0이 되므로 디스크 공간이 복구됩니다.

이를 방지하기 위해 로거가 수행할 수 있는 작업은 먼저 로그 메시지를 작성하고 로그 파일 디렉터리 항목이 있는지 확인한 다음, 그렇지 않은 경우 원본 로그 파일을 닫고 새 로그 파일을 연 다음 메시지를 다시 작성하는 것입니다. 메시지는 손실되지 않습니다. 그러나 이 모든 작업을 수행하려면 시스템 로거가 가져야 하는 것보다 훨씬 더 복잡한 작업이 필요합니다. 기록하는 모든 메시지에 대해 기록하는 데 상당한 시간이 걸립니다. 추가 디렉터리 검사로 인해 파일이 성공적으로 완료되고 삭제되지 않습니다. .

위의 모든 내용을 더 명확하게 이해하기 위해 다음 명령은 디렉터리 항목 삭제 및 참조 감소를 수행하는 시스템 호출을 설명하므로 유익합니다. "man 3 unlink"

답변4

새로운 버전의 postfix 로그가 도착했는데 삭제 후 postfix 로그를 실행 하고 복원 /var/log/mail.log해야 했습니다.sudo chmod a+w /var/log/mail*service postfix restart

관련 정보