tailコマンドで、昨日(2020年6月24日)のスクリプトが止まったのでリカバリーする
止まるときもある
2020年6月24日の記事で10万行のURLリストと格闘しました。
kawahara-ci.hatenablog.com
ただ、インターネットは生もので運良く全て上手く行くわけはなく運が悪ければ通り止まります。
実際に止まりましてtail -f 出力ファイル
でも更新されなくなりました。
どうすれば良い?
止まっている行はps
で簡単にわかります。
12605 ttys001 0:00.75 curl -A "{$USER_AGENT}" --head http://にゃ~ん
この該当のURLを読み込みファイルでgrepします。
grep -n 'http://にゃ~ん' ./url.txt
43152:http://にゃ~ん
43152行目だとわかります。
次にCtrl-Cでスクリプトを止めます。
それから元のスクリプトを少々手直します。
ここで活躍するのがtail
コマンドです!
tail
コマンドはファイルの後ろから表示するコマンドで、デフォルトは最後の10行を表示します。
行数の指定も可能でtail -n 20 ファイル名
とすると最後の20行を表示します。(-20 と指定も可能)
今回の件はファイル全体の行数から止まった行数を引いた数だから100000 - 43152 = 56848
で、止まった行数も含みたいので、tail -n 56849 ファイル名
(確認のためにはtail -n 56849 ファイル名 |head
とするのが良い)と思うかもしれませんが、実はtail
コマンドには便利な技があります。
tail -n +43152 ファイル名 |head
としてみましょう、先程の計算結果での出力と同じ結果になりましたよね?
tail
コマンドでは+数値
でその行以降というやり方あります。
これでスクリプトを変更します。
#cat ./url.txt | while read line tail -n +43152 ./url.txt | while read line
変更したら、最後実行しましょう。
実行したけど実行が進まない場合は、43152行が無反応ってことなので、一行進めて43153行に変更しましょう。
これで再開できました、あとは放置するだけです。
余談ですが、止まったのは寝ているときだったので、5時間ぐらい無駄に過ぎました・・・。
止まったらAlertを投げる手もありますが、今回はリカバリー出来るだけでヨシ!とします。