2017-09-04 12 views
1

logrotateをdockerコンテナで設定しようとしています。私はdockerコンテナのバックグラウンドプロセスとしてhttpdを実行しています.logrotateの後、新しいログファイルを使用するためにリロードする必要があります。停止時間のためにコンテナを再起動したくありません。 docker kill --signal=HUP <container>でSIGHUPを送信しても、私のエントリポイントはシグナルを処理しないbashスクリプトです。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 

が、私はかなりドッカーする新しいおよびLinuxだとドッキングウィンドウは、そのプロセス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 

を得た:私はlogrotateの設定でこのようにそれを実行しようとしました存在しない。

EDIT:bashスクリプトを可能な限りSIGHUPをトラップするように変更するのではなく、代わりにlogrotate configの問題を解決します。

答えて

0

私は$(ps -e | awk '{print $1}')>>/tmp/exec-out.log 2>>/tmp/exec-out.log || trueがドッカーではなくホストのコンテキストで実行されていると考えていますので、間違ったpidが表示されることがあります。

ドッカーコンテナをpid=hostで実行した場合、pidが機能します。

また、あなたがそうのようなPIDを取得することができます:

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

しかし、あなたが実際にPIDを必要としない、あなたはとてもように、自分がdocker kill使用して信号を送ることができます。

docker kill --signal=HUP some-container

関連する問題