オープンソースこねこね

Webプログラミングなどについてあれこれ。

コマンド実行に関して色々面倒を見る、コマンドラッパーを実装した

github.com

コマンドラッパーです。実行したいコマンドを引数に指定して、実行すると色々やってくれるCLIツール。

ベースはhttps://github.com/Songmu/horensoのコードで、そこに自分が実務で使う機能を追加して、色々書き直させていただいた実装になっています。使い方も、想定される使用場面もhorensoと同様です。主にcronタスクの実行通知とかに使います。

github.com

songmu.jp

機能

  • コマンドの実行時、終了時、失敗時、成功時に任意のスクリプトを実行できるフックハンドラー。cronタスクの完了通知、失敗時のアラートなどを送ることができる。horensoreporternoticerと同様だが、もうちょい細かく実行ポイントを設定できる。
  • 標準出力とエラーをファイルに出力する、かんたんなロギング機能。これも本家のhorensoにある機能。
  • 多重実行の防止。
  • 指定時間を超過したときにタイムアウトさせる機能。

他にも、環境変数を設定したり、実行ユーザーやグループを変えたりする機能もあるのですが、作っておいて結局自分では使っていないので、あまり主張するようなものではないかも。

あと、特徴的な機能にLuaの実行環境が内蔵されています。これは、コマンド結果を通知するハンドラーの実装をサポートする目的で組み込んであります。

ハンドラーはhorensoの仕様と互換性があり、標準出力からコマンドの状態を表すJSONを受け取って任意の処理を行えます。コマンドの実行結果をSlackに通知する用途に使うならJSONを読んで、httpリクエストを送信するくらいで済むので、この内蔵Luaを使うことで、外部への依存なくハンドラーを実装できます。

なお実際にこのLuaで実装した、Slackに通知するハンドラーが以下にあります。

https://github.com/kohkimakimoto/crun/blob/master/handlers/crun-handler-slack

ちょっとトリッキーなshebangの指定をしているので、Luaのコードハイライトが効かず、読みづらいですが、ちゃんと動きます。

ちなみにLuaのランタイムは

github.com

を使用しています。

利用シーン

私自身としては

  • cronタスクに対して、チャットへの通知と多重実行防止、ファイルにログ出力
  • Webアプリのデプロイスクリプトに対して、チャットへの通知と多重実行防止

などに使っています。