みなさん、こんにちは。まどぎわです(・∀・)
いつもcron
の読み方を忘れてしまい検索して調べて、書くのが面倒くさかったので、いい感じにParseして表示してくれるgemを作って公開しました🙇♂️
cronとは?
cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。そして、Linux システムの管理を行なう場合、ログのローテートや、バックアップなど、定期的に自動実行したいジョブが数多くあります。
cron の設定ガイドから引用
下記のような形で実行時間を定義出来るやつです。例えば下記の場合、毎日7:00と23:00に実行されるような設定になります。
# 分 時 日 月 曜日 00 7,23 * * *
でも数字と*で書かれていて、毎回どこがどこを表すのか忘れてしまう。。。
CronConfigParser
そういうわけで、いい感じにParseしてくれるgemを作ってみました💎✨
👇リポジトリはこちら
使い方
基本的な使い方はこんな感じで、cronの設定をいい感じに確認することが出来ます🙌
CronConfigParser::Parser.call('00 5 * * * Asia/Tokyo') => #<CronConfigParser::CronConfig:0x00007fa4f492e820 @days=["*"], @hours=["5"], @minutes=["00"], @months=["*"], @timezone="Asia/Tokyo", @wdays=["*"]>
また、返却されたobjectにminutes_configured?
を実行すると、それが定義されているかどうかをチェックできます。(コードでcronを解析したいのような要件がない限りは、あんまり使い所はないかも😅)
# return false if configured nil or '*' config = CronConfigParser::Parser.call('00 5 * * * Asia/Tokyo') config.minutes_configured? => true config.days_configured? => false
あとは、簡単なcronの設定の検証(必須、英字等が含まれていないかの構文チェック)を行うことが出来ます👮
# not configured require property. CronConfigParser::Parser.call('00 5,13 * * ') => CronConfigParser::ConfigRequiredError # configured invalid property. CronConfigParser::Parser.call('00 5,a * * * Asia/Tokyo') => CronConfigParser::ConfigSyntaxError
validation: false
をつけることで検証を無効化することも出来ます👩🔧
CronConfigParser::Parser.call('00 5,a * * * Asia/Tokyo', validation: false) => #<CronConfigParser::CronConfig:0x00007fcedf09cdf0 @days=["*"], @hours=["5", "a"], @minutes=["00"], @months=["*"], @timezone="Asia/Tokyo", @wdays=["*"]>
これから
今後は、次実行時間を教えてくれるCronConfig#next_execute_at
とかを作って行こうかなと思っていますm( )m
これが出来ると、5時と10時ちょうどだけに実行したいときに* 5,10 * * *
と定義してしまい、5時と10時に毎分実行されるような定義をしてしまう前に気づけるので、便利かなぁと。
おわりに
私みたいにcronの設定を毎回忘れちゃう人がいたら、よかったら使ってみてください🙇♂️