docker使用中に困ったtailプロセス未終了事件

docker使用中に困ったtailプロセス未終了事件

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

発端はdockerの中で動作中のapacheログをリアルタイムに表示したことでした。

動作中のdockerへattachして、
「tail -f /var/log/apache2/ログファイル」
コマンドを実行。

そうかそうか。なるほどー
ふむふむ。

必要なのはもうわかったし、Ctrl + Cキーで・・・

(キーボー・キーボー)・・・(キーボードを押す音^^;;)
^C(Ctrl + C)

あら?

tail プロセスが終了しません!!!!!!!!

稼働中のwebサーバを止める訳にはいかない!!

検証環境ながら最初に頭を過ったのは、検証環境だからといってdockerプロセスを終了して、
docker中のwebサーバまで止める訳には行かないという、使命感でした。

どうやら、dockerの外部から稼働中のdocker内部のプロセスをOn/Offする方法は
見つからず、残念(汗)

答えは、Ctrl + ¥を押すこと!!

結論からいうと、Ctrl + ¥を押してフォアグラウンドで起動中のtailプロセスを終了することができました。

^¥QUIT
bash-4.1#

Ctrl + CとCtrl + Zを試してもどっちも効かずで、焦りましたね(汗)

ちなみに、それぞれの操作で以下のようなことが起こります。

  • Ctrl + Cを押す -> 実行中のプロセスへSIGINTを送る。デフォルトだとこれでプロセス終了。
  • Ctrl + Zを押す -> 実行中のプロセスへSIGTSTPを送る。プロセスを一時停止し、バックグラウンドへ回す。
  • Ctrl + ¥を押す -> 実行中のプロセスへSIGQUITを送る。プロセス終了。

今回のdocker環境では、SIGINTとSIGTSTPが効かなかったとのことです。

ちなみにCtrlキーとの組み合わせ設定については、以下コマンドにて確認可能です。

(以下、今回のdocker内部で実行した結果)

bash-4.1# stty -a
speed 38400 baud; rows 54; columns 116; line = 0;
intr = ^C; quit = ^¥; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

最後に

大した内容ではありませんが事前に知らず、障害対応中に遭遇してしまうと困りますよね。
ぜひ頭のどっかにinputして、docker運用時に困ったら思い出してもらえればと思います。

ソフトバンク・au・ドコモの方は、公式のオンラインショップを利用すれば頭金不要で通常のショップよりお得に購入できます。

【週刊bitWave】(メルマガ)始めました!

登録はこちらからメールアドレスを入力してお申込みください。

ご登録いただいたメールアドレスは 【週刊bitWave】の更新情報の配信にのみ使用します。

個人情報の取扱いに関しては、「プライバシーポリシー」をご確認ください。解除はいつでもこちらから行うことが可能です。

あなたにおすすめ