Logrotate는 루트 액세스 없이는 작동하지 않습니다.

Logrotate는 루트 액세스 없이는 작동하지 않습니다.

문제는 서버에 대한 루트 액세스가 쉽지 않다는 것입니다. 그렇기 때문에 루트 없이 logrotate를 실행하는 것이 매우 편리합니다. 이것은 온라인에서 기사를 읽은 후 내가 한 일입니다.

  1. logrotate.conf 및 logrotate.status 두 파일이 포함된 /home/techyman/logrotate 디렉터리를 생성합니다.
  2. logrotate.conf에 logrotate 구성 파일을 배치합니다.
/home/techyman/glassfish4/glassfish/domains/*/logs/*.log {
        su techyman techyman
        daily
        copytruncate
        missingok
        rotate 30
        compress
        notifempty
        dateext dateformat -%Y-%m-%d-%s
}
  1. 크론 작업 실행
0 1 * * *  /usr/sbin/logrotate -s /home/techyman/logrotate/logrotate.status /home/techyman/logrotate/logrotate.conf

이 서비스는 매일 오전 1시에 운영됩니다. 1초마다 테스트하려면 * * * * *cron 작업에서 실행하면 됩니다. 그러나 이것은 작동하지 않습니다. 강제로 실행하면 "상태 파일 상단에 잘못된 줄이 있습니다"라는 메시지가 표시됩니다. 그렇지 않으면 아무런 조치도 표시되지 않습니다. application.log만 보입니다.

이 문제를 어떻게 해결할 수 있나요? 내가 뭘 잘못했나요?

삭제했는데 notifempty여전히 작동이 안되네요.

그런 다음 삭제했지만 su techyman techyman여전히 작동하지 않았습니다.

마지막으로 이 작업을 수동으로 수행합니다. 그러나 cron 작업은 여전히 ​​작동하지 않습니다.

/usr/sbin/logrotate -s /home/techyman/logrotate/logrotate.status  
 -f /home/techyman/logrotate/logrotate.conf

산출head -5 logrotate.status

logrotate state -- version 2
"/home/techyman/glassfish4/glassfish/domains/b/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/domain1/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/e/logs/application.log" 2023-11-19-17:46:26
"/home/techyman/glassfish4/glassfish/domains/c/logs/application.log" 2023-11-19-17:46:26

문제가 해결되기를 바라면서 logrotate.conf에서 이를 제거 했지만 daily여전히 cron에서는 작동하지 않습니다.

답변1

이 메시지는 bad top line in state file다음을 나타냅니다.상태파일(이 옵션으로 지정한 파일 -s)은 존재하지만 첫 번째 줄도 존재하지 않습니다.

logrotate state -- version 1

또는

logrotate state -- version 2

이 오류는 파일을 직접 만든 경우에 touch /home/techyman/logrotate/logrotate.status발생합니다 (예: 파일이 존재하지 않는 경우 logrotate디렉터리 권한이 허용되면 처음 실행 시 자동으로 생성되고 적절한 헤더 줄이 자동으로 추가됩니다. logrotate이 옵션을 사용하여 한 번 실행하면 -f자체적으로 문제가 해결될 수 있습니다.

logrotate상태 파일을 업데이트하면 먼저 새 파일이 생성된 다음 이전 상태 파일로 이름이 바뀌기 때문에 디렉터리 권한은 파일이 상태 파일 디렉터리에 생성되도록 허용해야 합니다 . logrotate그렇지 않으면 상태 파일 업데이트가 전혀 작동하지 않습니다.

또한 logrotate(8)매뉴얼 페이지에서 다음 사항에 유의하십시오.

일반적으로 logrotate일일 크론 작업으로 실행됩니다.하루에 여러 번 로그를 수정하지 않습니다.로그 기준이 로그 크기를 기반으로 하지 않고 logrotate가 하루에 여러 번 실행되거나 -f 또는 --force 옵션이 사용되지 않는 한.

귀하의 경우 logrotate.conf이 옵션은 daily로그가 하루에 한 번만 순환되도록 지정합니다. 로 변경하면 hourly매 시간마다 로그를 순환시킬 수는 있지만, logrotate한 시간에 한 번 이상 실행시켜도 여전히 소용이 없습니다.

로그를 한 시간에 두 번 이상 교체하려면 모든 시간 간격 옵션을 제거하고 size대신 옵션을 지정해야 합니다.

또한 logrotate매분마다 실행하면(특히 이 옵션이 활성화된 경우 ) 다음 작업이 시작될 때까지 이전 작업이 완료되지 않을 compress가능성이 높습니다 . 이런 일이 발생하지 않도록 하려면 시작 시 상태 파일을 잠그십시오.logrotatelogrotate

관련 정보