コマンド実行に関して色々面倒を見る、コマンドラッパーを実装した
コマンドラッパーです。実行したいコマンドを引数に指定して、実行すると色々やってくれるCLIツール。
ベースはhttps://github.com/Songmu/horensoのコードで、そこに自分が実務で使う機能を追加して、色々書き直させていただいた実装になっています。使い方も、想定される使用場面もhorenso
と同様です。主にcronタスクの実行通知とかに使います。
機能
- コマンドの実行時、終了時、失敗時、成功時に任意のスクリプトを実行できるフックハンドラー。cronタスクの完了通知、失敗時のアラートなどを送ることができる。
horenso
のreporter
やnoticer
と同様だが、もうちょい細かく実行ポイントを設定できる。 - 標準出力とエラーをファイルに出力する、かんたんなロギング機能。これも本家の
horenso
にある機能。 - 多重実行の防止。
- 指定時間を超過したときにタイムアウトさせる機能。
他にも、環境変数を設定したり、実行ユーザーやグループを変えたりする機能もあるのですが、作っておいて結局自分では使っていないので、あまり主張するようなものではないかも。
あと、特徴的な機能にLuaの実行環境が内蔵されています。これは、コマンド結果を通知するハンドラーの実装をサポートする目的で組み込んであります。
ハンドラーはhorenso
の仕様と互換性があり、標準出力からコマンドの状態を表すJSONを受け取って任意の処理を行えます。コマンドの実行結果をSlackに通知する用途に使うならJSONを読んで、httpリクエストを送信するくらいで済むので、この内蔵Luaを使うことで、外部への依存なくハンドラーを実装できます。
なお実際にこのLuaで実装した、Slackに通知するハンドラーが以下にあります。
https://github.com/kohkimakimoto/crun/blob/master/handlers/crun-handler-slack
ちょっとトリッキーなshebangの指定をしているので、Luaのコードハイライトが効かず、読みづらいですが、ちゃんと動きます。
ちなみにLuaのランタイムは
を使用しています。
利用シーン
私自身としては
- cronタスクに対して、チャットへの通知と多重実行防止、ファイルにログ出力
- Webアプリのデプロイスクリプトに対して、チャットへの通知と多重実行防止
などに使っています。