RHEL에서 logrotate가 kill -HUP를 사용하는 이유는 무엇입니까? 모든 경우에 필요합니까?

RHEL에서 logrotate가 kill -HUP를 사용하는 이유는 무엇입니까? 모든 경우에 필요합니까?

kill -HUP를 사용하여 시스템 로깅을 봅니다.

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

-HUP을 사용하는 것은 syslog와 같은 데몬이 SIGHUP을 포착하면 스스로 다시 시작하려고 시도하여 열려 있는 모든 파일이 플러시되기 때문이라는 것을 이해합니다.

왜 새로 고쳐야 하는지 이해가 되지 않습니다.

syslog가 로그 파일에 새 로그만 추가하는 경우 열린 파일은 쓰기 모드가 됩니다. 이 경우 로그 전환이 발생하고 파일 시스템의 이전 로그 파일 항목이 삭제되면 새 로그 줄을 추가해야 할 때(모든 syslog 서비스가 루트로 실행된 후) 새 파일이 자동으로 생성되지 않습니다. ?

차이점은 w와 u 모드에 대한 이해에 더 있다고 생각합니다. 나는 이것에 대해 빠른 결론을 내릴 수 없습니다.

또한 kill -HUP를 사용하고 서비스를 다시 시작하지 않는 이유는 무엇입니까? 차이가 있을까요?

답변1

일반적으로 서비스는 실행되는 동안 로그 파일을 열어 둡니다. 즉, 로그 파일의 이름이 바뀌거나 이동되거나 삭제되더라도 신경 쓰지 않고 처리된 열린 파일에 계속해서 씁니다.

logrotate가 파일을 이동할 때 서비스는 동일한 파일에 계속해서 씁니다.

예: crond는 /var/log/cron.log에 기록합니다. 그런 다음 Logrotate는 파일 이름을 /var/log/cron.log.1로 변경하므로 crond는 열린 파일 /var/log/cron.log.1에 계속 기록합니다.

crond에 HUP 신호를 보내면 기존 파일 핸들을 닫고 원래 경로 /var/log/cron.log에 대한 새 파일 핸들을 열어 새 파일을 생성하게 됩니다.

다른 신호 대신 HUP 신호를 사용하는 것은 프로그램의 재량에 달려 있습니다. 일부 서비스(예: php-fpm)는 USR1 신호를 수신하여 자신을 종료하지 않고 파일 핸들을 다시 엽니다.

답변2

파일을 이동하면 해당 파일을 연 프로그램은 여전히 ​​새 위치에서 동일한 파일을 열고 이전 로그 파일에 계속 추가합니다. 반드시 자체적으로 다시 시작되는 것은 아니지만 kill -HUP(syslog의 경우 해당되지만 자체 로그를 관리하는 cron 데몬의 경우 로그 파일 자체를 제어할 뿐입니다) 파일을 닫고 파일을 열게 만들 수도 있습니다.이름으로, 이는 스크립트의 중요한 부분입니다. syslogd를 강제로 다시 시작한다는 것은 다시 시작할 때 syslogd 서비스를 사용할 수 없음을 의미하는 반면, syslogd가 처리 방법을 알고 있는 신호를 사용하면 투명하게 "다시 시작"하는 데 필요한 모든 작업을 수행할 수 있습니다.

관련 정보