はじめに
Linux環境で定期的に実行したい処理は、cronを使うことが多いと思います。
しかし、cronでは下記の点でシェルスクリプトの作りが悩ましくなります。
- ログがきちんと取れないので、問題があった時に対処が大変
- 同時実行を抑止したい場合に作り込みが必要
- 終了した場合の通知をスクリプトに書き込む必要がある
こんなケースを解決するために、上記悩みを解決するラッパーをrustで作成しました。
cronを使わずにsystemdのtimer使えば悩みは解決しますが…
定期処理を一元管理するにはcrontabで指定するのが使い勝手がいいんですよね…
機能紹介
crontabで下記の様に書き込むだけです。
* * * * * ezcron -r /path/to/report.sh job01 -- /path/to/yourscript1
この指定で、
- ログの実行毎に
/var/log/ezcron/%Y%m%d-%H%M%S-job01.log
にstdout,stderrの内容が記録されます。 -
job01
は任意に設定可能です。job01
と設定されたスクリプトは、同時実行を抑止します。 -
-r
で指定したスクリプトが、スクリプト終了時に実行されます。
毎分動く指定をすれば、ログファイルが大量になってしまうので、ログの削除をcronで実行すれば良いかと…
0 0 * * * ezcron -r /path/to/report.sh job02 -- find /var/log/ezcron/ -type f -mtime +30 -exec rm {} \;
同時実行を許可したければ、ezcron
のオプションで-m
を指定すれば同時実行されます。
インストール
とりあえず、ここにに公開してあります。
バイナリは、
- x86_64-linux
- armv7-linux
を準備してあります。
rustを使ってみた感想
C、C++を嗜んで来ましたが…依存ライブラリについての苦労は全く無くなったので、大分と楽になりました。
エラーもヒントを出してくれるので、 C、C++に比べると大分と親切ですね。
でも、借用兼については大分と悩まされましたが、堅牢なバイナリが出来上がると思えば、その苦労はしなきゃいけないんだろうな…と思っております。
バイナリ配布につて
ビルド&リリースについては、"github actions"に丸投げです。
制限はありますが、便利な時代になったものです。
最後に
ソースを公開するのって恥ずかしいですね。
初めてのrustで作ったので、rustの書き方として間違ってる!とかの指摘もあるかと思います。
issueでもQiitaのコメントでも指摘頂けると助かります。
また、こんな機能も欲しい!というのがありましたらコメ頂けると幸いです。