incron使ってスクリプト送り込んだら勝手に起動する仕組み考え始めた

incronというのを知らなかったのですが、これとても夢が広がりますね。

というわけでとりあえず軽く膨らませてみました。

ちょっとしたスクリプトをたくさんのサーバで気軽に実行したい

という要求はままあると思います。その際に、実際にサーバ側でやりたい処理をスクリプトにして、それをrsyncで送り込んでからsshで叩くとかやってたんですが、incron使うとすごくスッキリとやれます。つまり、サーバ側でファイルが送り込まれたことをトリガーにして、そのファイルを実行してやればいいだけです。

ただ、そのスクリプトが残り続けるの気持ち悪いし、標準出力とかをログにだしたり、さらにはfluentdに送ったりしたいですよね:) というわけで超簡単なラッパースクリプトを介してみてはどうかと思いました。名づけてinrun

inrun & incron

上記スクリプトを各サーバの適当な場所に置いて実行権限付けて、incrontabはこんな感じ。

/watch/dir IN_MOVED_TO /path/to/inrun $@/$#

IN_MOVED_TOを使うとrsyncで送られてきた時にいい感じに引っかかります。あとは、サーバに向けてスクリプトをrsyncで送り込むだけ!

$ cat hello.sh
#!/bin/sh
echo Hello World
$ rsync -av hello.sh server:/watch/dir
$ ssh server cat /tmp/inrun.log
Hello World

今はとりあえずサーバのローカルのログに書いてますが、これがいい感じに集まってくるところまでラッパーで面倒みれると大変いい感じですね。

まとめ

すごい適当に書いただけなので、誰か育ててください!

ところでincronはなんて発音するんですかねぇ。