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