나는 logrotate 구성을 배우고 있습니다. 그래서 명령의 매뉴얼 페이지를 읽고 특정 애플리케이션 로그에 대한 logrotate 구성을 살펴보았는데 아래 코드 조각이 계속 표시됩니다. (Centos 6.8 이하 환경)
postrotate
/bin/kill -HUP `cat /var/run/XXX.pid 2>/dev/null` 2> /dev/null || true
endscript
아니면 그런 것. 내 질문은 필요한 프로세스( kill -HUP
또는 에서 찾을 수 없는 프로세스)를 사용할 수 없는 경우 프로세스가 파일 쓰기를 계속하는 것을 어떻게 중지합니까? 프로세스를 종료하는 방법을 알고 있지만 파일에 쓰는 것을 중지하거나 위의 예처럼 파일 설명자를 다시 읽도록 하고 싶습니다. 아니면 적어도 그렇게 한다고 생각합니다.kill --help
man kill
man signal
/var/run/xx.pid
답변1
/var/run
어떤 PID를 제거해야 하는지 아는 것은 pid 파일을 그 안에(또는 /run/user/$UID
자신의 사용자 계정으로 관리되는 프로세스에) 두는 데 핵심입니다. 프로세스가 해당 파일에 쓰지 않는 경우 그렇게 하도록 구성하거나(가능한 경우) 통과해야 합니다.가정 교사pid 파일을 생성합니다.
최후의 수단으로 로그 파일이 열려 있는 프로세스를 확인할 수 있습니다.fuser
, 또는 이러한 프로세스를 직접 종료할 수도 있습니다(이렇게 하면 -w
파일을 쓰고 있는 프로세스만 종료하는 옵션을 잊지 마세요).
ps $(fuser /path/to/log/file 2>/dev/null)
fuser -w -k -HUP /path/to/log/file