Shell の基礎知識

【Shell-Tips】シェル中断処理「Trap」を実装する。

システムの運用を行ってくうちに、ディスク容量の枯渇やネットワークの瞬断などが原因で、思わぬ障害に出くわすようになってきます。

そこで、実行シェルに問題が発生した場合などに備え、予め中断ロジックを作成してみます。

「trap」コマンドを使用して、シェルを中断する

シェルには、予め組み込みコマンドとして「trap」コマンドが用意されています。

拾えるシグナルは下記になります。

シグナルシグナル名意味
0-プロセス終了時に送出する EXIT シグナル
1HUPハングアップシグナル
2INT割り込みシグナル(Ctrl+C や Del キー)
3QUIT プログラム実行中止のクイットシグナル
9KILLプロセスの強制終了
※ 故意による強制終了なのでtrapでは拾えない
15TERMプロセスを終了させるための終了シグナル

コマンドの書式

trap [アクション] シグナル 

シェルスクリプトが、シグナルに指定した(複数書けます)シグナルを受け取ったとき、どういう処理をするかをアクションのところに指定します。

アクションには、関数名を指定して、シグナル取得時に関数を実行させることが可能です。

Abortメッセージの作成

メッセージ設定ファイルへ、トラップを拾った際に出力するメッセージを追加しておきます。

[ <BASE_DIR>/scripts/etc/message.conf ]

message.conf

W-00001 user.warn "The shell script aborted the process. Check the log for the cause."
E-00001 user.err " The number of arguments is incorrect. args_count: ["$#"]"

実行シェルスクリプトの作成

簡単な流れ

  • 実行シェルへ「sleep」コマンドを実行させて15秒間待機状態にします。
  • キーボードから「Ctr + C(INT)」を入力して割り込みします。
  • シェルスクリプトは、「abort」関数を呼び出しシェルを中断します。

今回は、「abort」関数へ、外部ファイルから取得したアボートメッセージをログへ出力させてみます。

[ <BASE_DIR>/scripts/bin/func.sh ]

実行結果を見てみます。

1行目:シェル実行(sleep待機中)
2行目:「Ctr + C」で割り込み実行
5-6行目:ログを確認します。
アボート処理を行った旨のメッセージがログに出力されていることが分かります。

今回は、ログ出力で「trap」コマンドの確認を行いましたが、実際には、シェル実行中に作成した中間ファイルの削除や、マウントポイントをアンマウントしておく等、後処理を記述しておくことが一般的な使い方となります。

本スクリプト利用により発生した利用者の損害全てに対し、いかなる責任をも負わないものとし、損害賠償をする一切の義務はないものとします。

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Shell の基礎知識