2017-09-04 15 views
1

docker 컨테이너로 logrotate를 구성하려고합니다. docker 컨테이너에서 백그라운드 프로세스로 httpd를 실행 중이며 logrotate 후 새 로그 파일을 사용하기 위해 다시로드해야합니다. 가능한 가동 중지 시간 때문에 컨테이너를 다시 시작하지 않으려합니다. docker kill --signal=HUP <container>으로 SIGHUP을 보내는 것은 작동하지 않습니다. 내 진입 점은 신호를 처리하지 않는 bash 스크립트입니다. 나는 logrotate에의 설정이처럼하려고 노력 :Logrotate postrotate 및 docker exec 이상한 동작

... 
sharedscripts 
postrotate 
    service httpd reload > /dev/null 2>/dev/null || true 
    docker exec some-container kill -HUP $(ps -e | awk '{print $1}')>>/tmp/exec-out.log 2>>/tmp/exec-out.log || true 
endscript 

하지만 난 고정 표시기에 아주 새로운 해요 및 리눅스와 고정 표시기 프로세스 ID를 얻는 이유를 정말 이해가 안

kill: sending signal to 30 failed: No such process 
kill: sending signal to 31 failed: No such process 
kill: sending signal to 32 failed: No such process 
kill: sending signal to 33 failed: No such process 
kill: sending signal to 34 failed: No such process 
kill: sending signal to 35 failed: No such process 
kill: sending signal to 36 failed: No such process 
kill: sending signal to 37 failed: No such process 
kill: sending signal to 38 failed: No such process 

있어 그 존재하지 않음.

편집 : 가능한 경우 SIGHUP을 트랩하도록 bash 스크립트를 변경하지 않고 대신 logrotate config의 문제를 해결하십시오.

답변

0

나는 $(ps -e | awk '{print $1}')>>/tmp/exec-out.log 2>>/tmp/exec-out.log || true이 docker가 아닌 호스트의 컨텍스트에서 실행되고있어 잘못된 pid를 얻을 수 있다고 생각합니다.

도커 컨테이너를 pid=host과 함께 실행하면 pid가 작동합니다.

또는 당신과 같이 PID를 얻을 수 있습니다 :

docker inspect --format {{.State.Pid}} <container>

그러나 실제로 PID를 필요가 없습니다, 당신과 같이 자신 docker kill 사용하여 신호를 보낼 수 있습니다

docker kill --signal=HUP some-container