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 はなんて発音するんですかねぇ。