0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

コマンドを監視して終了時や停止時などにSlackの通知を送信する

Last updated at Posted at 2023-02-19

example image

概要

卒論用に作ったのですが、便利だったのでパッケージ化してpipでインストールできるようにしました。

コマンドが

  1. 正常に終了した
  2. エラーを発生した
  3. 指定時間を超えて出力がない
  4. 指定した正規表現とマッチした

場合にSlackの通知を送信します。

使用例

走らせたいコマンドの前にlookoutと書くだけです。

シンプルな使い方
$ lookout python kusodeka_program.py arg1 arg2

正規表現でも通知を設定できます。下はcondaでパッケージをインストールする際の([y]/n)?にマッチして通知を送る例です。

condaのインストール待ち
$ lookout --regex "\(\[y\]\/n\)\?" conda install opencv

また、Slackのインストールも不要です。例えばサーバで大きなプログラムを動かしている場合、

バックグラウンドで走らせる例
$ nohup lookout python train.py

とすればバックグラウンド実行でコマンドが終わった時やエラー発生時に通知が送信されます。

インストール

インストール
$ pip install lookout-python

でインストールします。Slackのインストールは不要です。初回起動時にブラウザでSlackの認証を求められます。画面に従うと認証用コードが表示されるので、それをコピペして下さい。

オプション

タイムアウト通知の制限時間を設定

--hangthreshold 秒数

「プロセスが止まってるかもしれません」という通知を送るまでの時間の設定です。設定は保存され次回以降も適用されます。

正規表現を設定

--regex "正規表現"

正規表現を設定すると出力がマッチした場合に通知を送ります。記号は\でエスケープするのを忘れないようにしてください。正規表現がshと干渉しない場合はダブルクオートは不要です。

複数個設定したい場合は正規表現の|を使って下さい。

チャンネルを変更

$ lookout --change

スラックの認証をやり直します。

リセット

$ lookout --reset

初期化します。

制限

  • 出力の色が再現されないことがあります。出力の処理のためにpipeを通しているのですが、プログラムによっては出力先が実際のターミナルではない場合にANSIエスケープシーケンスを出力してくれないことが理由です。
  • 正規表現の通知は改行を待たないため、通知に表示される最終行はマッチした正規表現以降が欠けています。これは、入力を求めるプロンプトなどが改行を含まない場合にも対応するためです。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?