문제는 서버에 대한 루트 액세스가 쉽지 않다는 것입니다. 그렇기 때문에 루트 없이 logrotate를 실행하는 것이 매우 편리합니다. 이것은 온라인에서 기사를 읽은 후 내가 한 일입니다.
- logrotate.conf 및 logrotate.status 두 파일이 포함된 /home/techyman/logrotate 디렉터리를 생성합니다.
- 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
}
- 크론 작업 실행
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
가능성이 높습니다 . 이런 일이 발생하지 않도록 하려면 시작 시 상태 파일을 잠그십시오.logrotate
logrotate