- 締切済み
シェルスクリプトでエラー時にリトライ方法
下記のようなシェルスクリプトを作成したいと思っています。 apacheのアクセスログを確認し、 (1)httpステータスが200なら後続の処理を実行 (2)200以外ならエラーを表示させ、 200以外なら5回リトライして5回ともhttpステータス"200"が一度も返ってこなければ(grepに含まれていなければ)スクリプトを中止するような処理を行いたいです。 初心者でループ処理?リトライ処理?というのがよくわかっていなくて… 下記のようなスクリプトにどう手を加えたらいいかご教授いただけますでしょうか。 #!/bin/sh cd /XXX/apache/log if tail -n 5 access_$DATE.log grep "|200|" >/dev/null; then tail -n 5 access_$DATE.log grep "|200|" echo "httpステータスは200です" else echo "httpステータスは200以外です" exit fi : よろしくお願いします
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
やりたいことが、やや不明ですが、スクリプトから推測すると、 (1)ログの最後5行にステータス200の行が1つでもあれば後続の処理を実行 (2)ログの最後5行にステータス200の行が1つもなければ、エラーを表示させ、処理を終了 ということでいいのでしょうか? ログのフォーマットが不明ですが、スクリプトだと項目区切りが「 | 」のようなので、それに習ってます。また、$DATE は適切に設定されているという前提です。 #!/bin/sh cd /XXX/apache/log if tail -n 5 access_$DATE.log | grep "|200|" >/dev/null; then echo "httpステータスは200です" else echo "httpステータスは200以外です" exit fi 後続処理
- blackbox_kr
- ベストアンサー率73% (133/182)
やりたいのは「Apacheログステータスコードが200か否か」判断したいということですよね? ならば、grep の後にリターンコードをみて判断すれば良いのではと思います。 リターンコードが「0」:マッチングした文字が有 リターンコードが「1」:マッチングした文字が無 なので、grepの後に以下の通り処理すれば if [ $? -eq 0 ]; then echo "httpステータスは200です" else echo "httpステータスは200以外です" fi 参考にしてください。