LoginSignup
0
0

【rust】crontabで動くコマンドの管理を楽にするラッパーをrustで作ってみた

Last updated at Posted at 2023-12-12

はじめに

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のコメントでも指摘頂けると助かります。

また、こんな機能も欲しい!というのがありましたらコメ頂けると幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0