答えはログにある
お店の支払いが、夜中の12時に動かなくなりました。だれも何もさわっていません。エンジニアが最初にするのは、支払いのプログラムが何をしたかを書いたファイルの、終わりのほうを読むことです。そこには、何が悪かったかが、時刻つきで書いてあります。
このレッスンが終わると
メモ
ログを読み、おかしな動きをするプロセスを止めることができる。
キーワード
- ログ:プログラムが何をしたかを書き残すファイル。
- パイプ:
|。1つめのコマンドの答えを、次のコマンドに渡す。 - プロセス:いま動いているプログラム。
- PID:プロセスにつく番号。
- シグナル:プロセスに送るメッセージ。たとえば「止まれ」。
ウォームアップ:すでに知っていること
メモ
頭の中で答えてみましょう。1. >> はファイルに何をしますか。2. パスとは何ですか。3. ファイルを丸ごと表示するコマンドはどれですか。このレッスンでは、ファイルの終わりだけを見るコマンドが出てきます。
はじめる前に
メモ
このレッスンの上にあるバーのラボを起動を押してください。このラボは、あなた専用の Ubuntu のマシンまるごとです。コンテナよりも、立ち上がるまで少し時間がかかります。実行ボタンを押すと、コマンドが順番にマシンのターミナルへ入力されます。「マシンはまだ起動中です」と出たら、数秒待ってからもう一度押してください。自分で入力と書かれたコマンドは、自然には終わらなかったり、途中で何かを聞いてきたりします。そのときは、バーのターミナルを開くを押して、自分で打ち込みます。
ログの終わりを読み、探す
ログの終わりが、いちばん新しい部分です。tail -n 5 は最後の5行を表示します。grep は、ある言葉を含む行だけを表示し、-c を付けると数を数えます。最後のコマンドは、パイプで3つをつなぎます。ログ全体を読み、hello の行だけを残し、新しい3行を見せます。
tail -n 5 /var/log/test.logここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
grep 'hello' /var/log/test.logここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
grep -c ERROR /var/log/test.logここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
cat /var/log/test.log | grep 'hello' | tail -n 3ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分で入力:ログが増えるのを見ていく
ターミナルで tail -f /var/log/test.log と打ちます。新しい行が、書かれるたびに現れます。止めるときは Ctrl+C を押します。実行ボタンは Ctrl+C を押せないので、これは自分で打ちます。ほかの人のメモで tail -200f を見かけることもあります。最後の200行を先に見せてから、続きを追います。
チェック
ヒント
ファイルの終わりだけを見るコマンドと、ある言葉を含む行だけを残すコマンドは、どれですか。答え: tail と grep です。パイプでつなぐと、ログについてのたいていの疑問に答えられます。
ファイルとコマンドを探す
find / -name 'test.log' は、マシン全体を探します。あなたが入れない場所もあるので、2>/dev/null でそのエラーメッセージを捨てます。which ls は、コマンドがどこにあるかを教えます。
find / -name 'test.log' 2>/dev/nullここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
which lsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
プロセスを探す
動いているプログラムをプロセスといい、番号(PID)があります。ps -ef で全部を並べ、| grep worker で、その言葉を含む行だけを残します。2行出ます。ワーカーと、いま実行した grep 自身です。pgrep -f lab-worker は番号だけを表示します。
ps -ef | grep workerここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
pgrep -f lab-workerここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分で入力:止める
上の答えから番号を読み取ります。ターミナルで、自分の番号を使って kill 1234 と打ち、もう一度 ps -ef | grep worker を実行します。ワーカーは消えています。次に、2つめのプロセスを ps -ef | grep stubborn で探し、kill と番号を打って、もう一度見ます。まだ残っています。ていねいなお願いを無視するからです。kill -9 と番号を打つと、止まります。top は、いちばん忙しいプロセスをその場で見せます。終わるときは q を押します。
よくある間違い
注意
kill -9 は、ただ強い kill だと思って、最初から使う人がよくいます。kill は、プログラムに「終わって」とお願いするので、プログラムは作業を保存して後片づけができます。kill -9 は、後片づけをさせずに、すぐに取り上げます。書きかけのファイルが残ることもあります。まず kill を使い、数秒待って、それでも止まらないときにだけ -9 を使います。
最後のチェック
ヒント
前に戻らずに答えましょう。1. tail -f はどうやって止めますか。2. 2>/dev/null は何をしますか。3. kill と kill -9 のうち、先に試すのはどちらですか。答え: Ctrl+C。エラーメッセージを捨てる。kill。
先生へ
ヒント
このレッスンは VM ラボで進めます。生徒一人ひとりに専用の Ubuntu マシンがあり、実行ボタンはそのターミナルに入力して、表示された結果を見せます。学習のポイント:1. tail と grep でログを読みます。2. find と which でものを探します。3. ps でプロセスを見つけ、kill で止めます。 よくある間違い:最初から kill -9 を使うこと。 必要なもの:ラボとブラウザー。ヒント:先生の画面で tail -f を動かして、次の行がいつ出るかをクラスに言わせましょう。 このラボにはチェックがなく、採点はしません。提出物がほしいときは、先生が自分で用意してください。