posgtres의 내부 로그 회전 메커니즘을 사용하고 있습니다. 30 일이 지난 로그 파일을 삭제하고 싶습니다. postgres가 어떻게해야합니까? postgres가 지원하지 않는 경우 30 일이 지난 로그 만 삭제하도록 logrotate를 설정할 수 있습니까?
내 현재 설정은 다음과 같습니다
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_truncate_on_rotation = off
log_rotation_age = 1440
log_rotation_size = 0
답변
Postgres 로깅 메커니즘 이이 정리를 지원한다고 생각하지는 않지만 Postgres가 작성중인 활성 로그 파일을 엉망으로하지 않는 한 logrotate 또는 cron 작업을 사용하여 오래된 로그를 삭제하는 것이 안전합니다.
Postgres 로깅의 경우 일반적으로 syslog에 로깅하고 일반 로그 회전 절차가 수행되도록하는 것이 좋습니다. 여기에는 몇 가지 장점이 있지만 두 가지 큰 장점은 다른 데몬과 동일한 방식으로 표준 로그 회전 절차를 사용하고 syslog 데몬이 원격 호스트에 로그를 보내도록하는 기능입니다 언젠가하고 싶은 일입니다.
다른 옵션은 Postgres 매뉴얼 섹션 23.3에서 간략히 설명 합니다.
답변
syslog를 사용하지 않는다면 cron에서 다음 스크립트를 실행하여 하루 만 호출하면됩니다.
#!/bin/sh
HOME=/var/lib/pgsql
export HOME
PGDATA=/var/lib/pgsql/9.1/data
export PGDATA
/usr/bin/find $PGDATA/pg_log -type f -ctime +30 -name "*.log" -exec /bin/rm {} \;
syslog에 로깅하지 않으면 pgAdmin 또는 pgFouine과 같은 도구를 사용하여 데이터베이스 로그를 보거나 분석 할 수 있습니다.