Shell の基礎知識

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

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

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

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

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

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

番号シグナル名意味主な用途
1SIGHUPハングアップ設定ファイルの再読み込みなど
2SIGINT割り込み (Ctrl+C)プロセスの中断
3SIGQUIT終了 (ダンプ生成)プロセス終了とコアダンプ生成
9SIGKILL強制終了プロセスの即時終了
11SIGSEGVセグメンテーション違反メモリアクセス違反
13SIGPIPEパイプ切断書き込み先が閉じられた場合
15SIGTERM終了要求優雅なプロセス終了
18SIGCONT停止から再開一時停止プロセスの再開
19SIGSTOPプロセス停止強制停止 (再開はSIGCONT)
20SIGTSTP端末停止 (Ctrl+Z)一時停止
30,10,16SIGUSR1ユーザー定義シグナル1カスタム処理
31,12,17SIGUSR2ユーザー定義シグナル2カスタム処理
34SIGRTMINリアルタイムシグナル (最小値)リアルタイム処理向け

コマンドの書式

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 の基礎知識