2012-07-02 2 views
3

나는 표준 우분투 postgres9.1 설치를 연속적으로 실행하고 있는데, 멈추지 않을 수 있습니다.postgres 9.1 로그 파일 변경

어떠한 구체적 로깅 대상에 관한 구성하지 않은, 이 때문에 로그 파일을 /var/log/postgresqlpostgresql-9.1-main.log (으로든 회전)이있다. 나는 프로세스의 표준 출력을 얻는다 고 가정한다.

는 내가 원하는 것은 다시 시작하지 않고, 다른 파일 대상을 구성하는 것입니다, 그리고 는 (죄송합니다 컬렉터, 어떤 시스템 로그 ... 사람들은 다시 시작 필요) 그러나 재구성과 새로운 자식 프로세스가 해당 파일을 사용하지 .

그럴 수 있습니까? 감사합니다.

답변

0

나는 내 이전 대답을 수정 한의 log_filename 옵션은 무시됩니다.

"회전 잘라 내기"를 통해 회전합니다. 즉, logrotate는 파일의 복사본을 만든 다음 기본 로그 파일을 비 웁니다.

이 경우 서버가 로그에 파일 핸들을 열고 쓰기 위해 운이 좋을 것입니다. 즉, 파일 이름을 mv old_name.log new_name.log로 간단히 변경할 수 있습니다. postgresql이 사용하는 파일 핸들은 이름이 아닌 파일 자체에 바인드됩니다.

이 솔루션은 서버를 다시 시작할 때 이전 이름으로 새 로그 파일을 만듭니다. 다시 시작될 때 동일한 장소에 계속 쓰도록 구성을 변경해야합니다.

+0

안녕 Couling, 답장을 보내 주셔서 감사합니다.상황을 자세히 설명하기 위해 필자의 업무는 로깅을 몇 일 동안 매우 장황하게 설정하는 것이다. 파티션에 자세한 로그 공간이 없습니다. 회전 된 파일이있는 일반 로깅을위한 충분한 공간이 있습니다. 그래서 어떻게 든 로그 파일을 리디렉션해야합니다. – stoqlt

+0

둘째,'log_filename' 만 설정하고 상대 파일 이름을 설정하면 실제로 테스트를 수행 할 때이 작업을 수행하게됩니다. 즉, 로깅이 없습니다. 그래서 나는'log_filename'을 설정하는 것이 실제로는 (버그가있는) 효과가 있다고 생각합니다. 'pg_ctlcluster'를 디버그하기 시작했습니다 – stoqlt

+0

log_filename은 공식적으로 로그 수집기 용입니다. 로깅 수집기를 사용하거나 syslog를 통해 로깅을 푸시해야하는 것처럼 들립니다. 이렇게하려면 서버를 다시 시작해야하지만 이후에 로깅 디렉토리를 변경할 때마다 다시 시작해야합니다. syslog 옵션을 사용하는 경우 rsyslog를 읽어야합니다. –

3

저는 이것이 비교적 간단하다고 생각합니다. 안타깝게도 로깅 수집기를 사용하려면 재시작이 필요합니다. 이를 사용하지 않으면 파티션간에 로그를 이동할 수 없습니다.

당신은에 사용되는 로그 구성 할 수 있습니다 :이 변경되면 /etc/postgresql/<version>/<cluster>/postgresql.conf

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log

, 당신은 변경 사항을 데리러 얻을 수있는 service postgresql reload을 수행해야합니다.

아마도 여기에서 분명해야합니다.이 대답의 요점은 서버를 다시 시작하지 않고 service postgresql reload을 사용할 수 있다는 것입니다. 다니엘 베리 테가 지적했듯이, 당신은 logging_collector를 사용하지 않고 로그 파일을 설정할 수 없기 때문에

+0

나는 이것이 재시동으로 간주 될 것이라고 확신한다 ... 그가 시스템을 다시 시작할 수 없다는 것을 의미하지 않는다면. 나는 포스트 그레스를 다시 시작할 수 없다는 것을 이해했다. – Falmarri

+1

흠, 문서를 다시 확인하러 갈 것입니다. 재 장전의 전체 시점이 재시작이 아니라고 생각 했나요? 바이너리에게 구성을 다시로드하도록 신호를 보냅니다. ... 내 서버에서 이것을 확인해도 클라이언트가 삭제되지는 않습니다. 따라서 재로드가 다시 시작되지 않습니다. –

+0

아, 깨닫지 못함 =] – Falmarri