ka20

Linuxをメインとしたインフラエンジニア(エンジニア歴約15年)

ka20

Linuxをメインとしたインフラエンジニア(エンジニア歴約15年)

マガジン

  • インフラエンジニアが仕事で使えるシェルスクリプトの書き方

    Linuxサーバのインフラエンジニアが、仕事で作るシェルスクリプト(bash)の書き方をまとめました。 サーバの構築設定をするうえで、シェルスクリプトを作る機会は数多く発生します。 サーバの維持運用や保守をおこなううえで、シェルスクリプトに盛り込んだ方が良いポイントをまとめましたので参考にして下さい。

最近の記事

基本的な書き方まとめ

Apacheを停止するシェルスクリプトの場合、実行したいコマンドは下の1行だけです。 # /etc/init.d/httpd stop しかし、サーバを維持保守・運用するうえで、障害時の調査・解析のしやすさや他スクリプトへの汎用性も考え、今までの記事にあげてきた項目の対応をおこない、以下のようなシェルスクリプトを作成します。 記載例 $ cat stop_apache.sh #!/bin/bash ######################################

    • 見出しを書こう

      シェルスクリプトの中に「ログに出力」、「プロセス数をチェック」などの処理に見出しを書きます。この一手間が、後から見た時の見やすさをグッと上げます。 記載方法 「#」でコメントして概要を記載した1文を加えます。 例1) ### output start log TIME=`date +"%Y/%m/%d %H:%M:%S"` echo ${TIME} ${HOSTNAME} ${BASENAME} I script start >> ${LOGFILE} 例2) ### A

      • 戻り値を付けよう

        シェルスクリプトが正常に終了したか、異常終了したかを明確に判断できるように、戻り値を設定します。 正常終了であれば「0」を指定します。 異常終了であれば「1」以上を指定します。 記載方法 シェルスクリプトの終了時の「exit」コマンドに引数で「0」や「1」を付けます。 例1)exit 1 例2)FLG=1 ; exit ${FLG} 記載例 $ cat stop_apache.sh #!/bin/bash #################################

        • インデント文字は統一しよう

          if文やfor文、while文など分岐処理やループ処理には、インデント付けて読みやすいシェルスクリプトにします。 インデント文字は半角スペースを4文字や、TABを1文字と決めてスクリプト内は統一します。 筆者の好みは半角スペース4文字です。 記載例 $ cat stop_apache.sh #!/bin/bash #################################################### # Script name : stop_apache.

        基本的な書き方まとめ

        マガジン

        • インフラエンジニアが仕事で使えるシェルスクリプトの書き方
          11本

        記事

          ログファイルを作ろう

          シェルスクリプトは実行しても、何も記録が残りません。 目的の処理だけをシェルにするのではなく、シェルスクリプトの開始・終了、目的の処理を実行した情報をログファイルに記録します。 記載方法 以下のようにログファイルにメッセージを出力します。 LOGFILE=log_file.log echo script start >> $LOGFILE echo Apache stoped >> $LOGFILE echo script end >> $LOGFILE 記載例 $ ca

          ログファイルを作ろう

          変数は上部にまとめよう

          スクリプトの中で使う変数は、ヘッダーの直後にまとめて記載します。 スクリプトの中で更新する必要があるものは、必要なポイントで定義します。 記載方法 以下は、筆者がよく使う変数です。 HOSTNAME=`uname -n`    ・・・ホスト名 BASEDIR="$(cd $(dirname $0) && pwd)"    ・・・本スクリプトが配置されているディレクトリパス BASENAME=${0##*/}    ・・・スクリプト名 BASENAME0=`basename

          変数は上部にまとめよう

          確認処理を入れよう

          目的の処理を実行する前に、想定されている状態になっているかを確認する処理を実行します。また、同様に目的の処理を実行した後にも、想定された状態になったかを確認する処理を実行します。 記載方法 Apacheを停止するシェルスクリプトの場合、Apache停止処理の前後にApacheが起動状態・停止状態であることを確認します。 Apache(httpd)のプロセス数を数え、プロセス数が0個であれば停止中、1個以上であれば稼働中と判断します。 既にApacheが停止していたり、Apa

          確認処理を入れよう

          変数は{}で囲もう

          変数の名称は末尾に数字が付くと、1ケタしか認識されません。変数「$HOSTNAME10」は「$HOSTNAME1」として認識されてしまいます。 そのため、変数の名称部分を{}で囲み「${HOSTNAME10}」と記載することで、誤認識を防ぎます。 合わせて変数名称は大文字に統一し、変数ということを認識しやすくします。 記載方法 ・シェルスクリプト内のすべての変数を、以下の様に英字部分を{}で囲み、大文字で統一します。 ${BASEDIR}/${BASENAME0}.log

          変数は{}で囲もう

          ログ出力を統一しよう

          ログにはスクリプトを実行した時間と処理内容を記録します。 複数のスクリプトが1つのログファイルに出力する場合でも、どのスクリプトで出力されたわかるようにスクリプト名をログに記録します。 複数のサーバが1つのログファイルに出力する場合でも、どのサーバで出力されたわかるようにホスト名をログに記録します。 情報なのか、エラーなのかを識別するフラグを付けて、ログ概要が一目でわかるようにします。 記録方法 1つの例ですが、以下のようなフォーマットでログ出力を統一するとわかりやすいです

          ログ出力を統一しよう

          インフラエンジニアが仕事で使えるシェルスクリプトの書き方

          マガジンの目的 Linuxサーバのインフラエンジニアが、仕事で作るシェルスクリプト(bash)の書き方をまとめました。 サーバの構築設定をするうえで、シェルスクリプトを作る機会は数多く発生します。 サーバの維持運用や保守をおこなううえで、シェルスクリプトに盛り込んだ方が良いポイントをまとめましたので参考にして下さい。 基本的な書き方 下のApacheを停止させるスクリプト「stop_apache.sh」に各記事で肉付けをして形にしていきます。 $ cat stop_apa

          インフラエンジニアが仕事で使えるシェルスクリプトの書き方

          ヘッダーを書こう

          シェルスクリプトの冒頭にはシェルスクリプトの目的や使い方、いつ誰が作成したかなどの情報を記載します。 文字コード違いによる文字化けを防ぐため、簡単な英語で表記することをおすすめします。 記載項目 ヘッダーには以下の項目を記載します。  ・スクリプト名  ・スクリプトの説明(概要)  ・使い方、実行方法  ・作成日  ・作成者 記載例 $ cat stop_apache.sh #!/bin/bash #####################################

          ヘッダーを書こう