コマンドの実行結果によってネットワーク監視灯(パトライト)を点滅させてみた
コマンドを実行した際の終了状態によって、ネットワーク監視灯(通称:パトライト)に操作して、視覚的に通知してみました。 例として、Linux(Ubuntu)のfpingをインストールして、Ping OKなら緑点滅、Ping NGなら赤点滅する動画です。
Ping NGでパトライト🚨を赤点滅させてみた。コマンドの終了状態に応じてパトライトを緑点滅や赤点滅するシェルスクリプトを作成 pic.twitter.com/5lzKJhvSUB
— kooshin (@kooshin) 2020年2月11日
はじめに
コマンドの実行に時間がかかった場合(例えば、rbenvによるRubyのインストールや、ネットワークが遅くてdocker pullが異常に時間がかかる場合など)、終わるまでTwitterなどで時間をつぶすことがあると思います。しかしながら、コマンドの終了に気が付かなく、Twitterで時間を溶かしてしまうことが私は多々あります。 このため、コマンドの実行終了をパトライト経由で通知してみました。
ネットワーク監視表示灯(以下、パトライト)にコマンドの実行が終了した場合に、緑点滅や赤点滅で気づけるように、ラッパーする感じのシェルスクリプトを作成してみました。
何かしらのコマンドを実行して、終了状態(exit status/return code)が、正常であればパトライトを緑点滅、異常であればパトライトを赤点滅させてみます。
パトライトをシェルから操作する方法は、下記を参照してください、
動作環境
動作環境は下記のとおりです。 今回はLinux上で動作させています。
仕組み
自作したシェルスクリプトのpatlite
スクリプトの引数に、コマンドを指定すると、コマンドの終了状態に応じてパトライトを操作します。
コマンドの終了状態によって、パトライトを緑点滅や赤点滅させます。
実行の流れ
大まかに下記のような流れでpatlite
スクリプトは動作しています。
patlite
スクリプトの引数に、終了を通知したいコマンドを指定patlite
スクリプトを実行- 開始時にパトライトを緑点灯。それ以外は消灯
- 引数のコマンドを実行
- コマンドの終了状態(exit status/return code)をもとに判断
- 終了状態が0ならパトライトを緑点滅。0以外ならパトライトを赤点滅
- 割込シグナルで途中終了した場合、パトライトを赤点滅
- 終了
patliteスクリプト
シェルスクリプトのpatlite
スクリプトのコードは下記のとおりです。
変数として定義した、パトライトのIPアドレスIPADD
やTCPポート番号PORT
を変更することで、他の環境でも使えると思います。
終了状態 | パトライトの操作 |
---|---|
正常終了(0) | 緑点滅(点滅パターン1) |
異常終了(0以外) | 赤点滅(点滅パターン2) |
割込終了(シグナル割込) | 赤点滅(点滅パターン1) |
#!/bin/sh # パトライトのIPアドレスとTCPポート番号 IPADDR="192.168.11.101" PORT="10000" # 緑の表示灯のみ点灯 /bin/echo -ne '\x58\x58\x53\x00\x00\x06\x00\x00\x01\x00\x00\x00' | /bin/nc -q0 $IPADDR $PORT # 途中終了の場合、異常と判断し、赤の表示灯を点滅(点滅パターン1) trap "/bin/echo -ne '\x58\x58\x53\x00\x00\x06\x02\x00\x00\x00\x00\x00' | /bin/nc -q0 $IPADDR $PORT; exit 1" 1 2 3 15 # 引数をコマンドとして実行 $* RETURN_CODE=$? case "$RETURN_CODE" in # return codeが0の場合は、正常と判断し、緑の表示灯を点滅(点滅パターン1) 0 ) /bin/echo -ne '\x58\x58\x53\x00\x00\x06\x00\x00\x02\x00\x00\x00' | /bin/nc -q0 $IPADDR $PORT ;; # return codeが0以外の場合は、異常と判断し、赤の表示灯を点滅(点滅パターン2) * ) /bin/echo -ne '\x58\x58\x53\x00\x00\x06\x03\x00\x00\x00\x00\x00' | /bin/nc -q0 $IPADDR $PORT ;; esac exit $RETURN_CODE
実行例
サンプルとして、fpingをインストールして、pingしてみました。
patilite
スクリプトの引数に、各コマンドを指定しています。
# patliteスクリプトに実行権付与 $ chmod +x patlite # fpingをインストール(ちょっと時間がかかる) $ ./patlite sudo apt install fping # Ping OKな例 $ ./patlite fping 192.168.10.1 -c 1 # Ping NGな例 $ ./patlite fping 192.168.10.2 -c 1
実行結果(ターミナル画面)
実行結果は、patlite
スクリプトに実行コマンドを指定する以外、
特に変化はありません。
実行結果(パトライト)
パトライトとターミナル画面を撮影した動画です(Twitterを参照)。
Ping NGでパトライト🚨を赤点滅させてみた。コマンドの終了状態に応じてパトライトを緑点滅や赤点滅するシェルスクリプトを作成 pic.twitter.com/5lzKJhvSUB
— kooshin (@kooshin) 2020年2月11日
おわりに
簡単な仕組みでパトライトを操作できるため、様々なことに応用できると思います。
きっと、ご自宅に必須のアイテムになること間違いなしです。 この機会に皆さんご自宅用に買いましょう。