FuelPHPのtasksのcron設定が多くなってきたので

最近もっぱらFuelPHPを使って開発を行っているのですが、
cronの設定がいつの間にか大量になってきたので
ある程度纏めれるFuelPHPのpackageを作成しました。

GitHub - dimgraycat/fuel-runtasks

実際どのようなpackageかは下記をご確認ください。

たとえば、

0 */1 * * * env FUEL_ENV=production php oil refine task1
0 */1 * * * env FUEL_ENV=production php oil refine task2:foo
0 */1 * * * env FUEL_ENV=production php oil refine task3:bar a b c d
0 */1 * * * env FUEL_ENV=production php oil refine task4:hoge "`date -d '1 hours ago' '+\%F \%H:00:00'`" "`date -d '1 hours ago' '+\%F \%H:59:59'`"

こんな感じで毎時に数個のtaskが実行される場合で
特にきっかり全てが0分に動かしたい分けではない時に。

または、

0 1 * * * env FUEL_ENV=production php oil refine task:extract type1
0 1 * * * env FUEL_ENV=production php oil refine task:extract type2
0 2 * * * env FUEL_ENV=production php oil refine task:transform type1
0 2 * * * env FUEL_ENV=production php oil refine task:transform type2
0 3 * * * env FUEL_ENV=production php oil refine task:load type1
0 3 * * * env FUEL_ENV=production php oil refine task:load type2

ETLの処理をcronの設定で処理をさせている時など。

上記のような設定を今回作ったpackageを使用するとこうなります。

まずはcronの設定

0 */1 * * * env FUEL_ENV=production php runtasks hourly
0 1 * * * env FUEL_ENV=production runtasks etl_type1
0 1 * * * env FUEL_ENV=production runtasks etl_type2

runtasksのconfigの設定(YAMLで記載します)

    • -
groups: hourly: - task1 - task2:foo - task3:bar a b c d - task4:hoge "`date -d '1 hours ago' '+%F %H:00:00'`" "`date -d '1 hours ago' '+%F %H:59:59'`" etl_type1: - task:extract type1 - task:transform type1 - task:load type1 etl_type2: - task:extract type2 - task:transform type2 - task:load type2

RunTasksで注意しなければダメなところは、
設定のarrayの部分は上から順に実行されるためあまり長いtaskが設定されているとcronが多重で動き出します。

他にも設定などはありますが、githubの方をご確認ください。

■ 今後の追加予定(:未定)

  • 設定ファイルが長くなるのでグループごとに別ファイルで管理できるようにする
  • 最近話題になったsongmu氏作のApp::RunCron様にSTDOUT, STDERRをLogだけでなく別の物に渡せるように。

後者は設定がもっさりしてくるのであまり追加予定ではないでs