クーロンジョブの複数登録・管理について

Events happening in the community are now at Drupal community events on www.drupal.org.
starbucks.espresso.journey's picture

以下について、ご相談させてください。

▼実現したいこと
外部のAPIをコールするクーロンジョブの複数登録・管理。
具体的には、
 ① APIキー、パラメータ、実行タイミングを画面から登録する
 ② ①で登録された実行タイミングになったら、APIキーとパラメータでAPIをコールする
(実行タイミングは、各設定でバラバラです)

elysia cronモジュールを使う想定です。

▼背景
もともとはDrupalを使わずに、crontabに書いていました。
ただし、コールする数が増えて運用が手間なのと、
将来的にダッシュボードやレポーティング機能を実現を
視野に入れているためです。

▼つまづいている箇所
elysia cron モジュールの思想だと、1モジュール1クーロン設定ですよね?
スキーマを見るとnameがユニークです。
APIをコールする1設定に対して、1モジュールを作って有効する手間は避けたいため、
何かよい方法はないかと....

あるいは、elysia cronの設定は1つで、実行タイミングを毎分にしておき、
画面から登録した実行タイミングを自前の処理で判定してコールするしないを制御する?
(elysia cronの処理を移植すれば容易!?)

などなど考えていますが、上記の場合、elysia cronが保持しているlast runなどの情報を
APIをコールする各設定で穏健を受けれないなと...

モヤモヤしているため、お知恵をお借りしたく思います。

Comments

hook_cronapi でできそうに見えます

blauerberg's picture

elysia cron モジュールの思想だと、1モジュール1クーロン設定ですよね?

elysia_cronの API.txt を見ると

You can extend cron functionality in you modules by using elysia_cron api.
With it you can:
- have more than one cron job per module
- have a different schedule rule for each cron job defined
- set a description for each cron job

なので、hook_cronapi でCronで実行したい単位に分けて実装したcallbackを複数登録すれば、
目的のことができるのではないかと思います。
上記の API.txt にサンプル実装もあるので、参考になると思います。

hook_cronapi

starbucks.espresso.journey's picture

hook_cronapi でCronで実行したい単位に分けて実装したcallbackを複数登録すれば、

確かに実行したい単位で登録できました。
ただし、上記方法ですと、hook_cronapiで事前に定義が必要なのですよね。
画面から1つの設定をしたらelysia_cronのCron Settings画面の
一覧に表示させたい(elysia_cronの制御下に置きたい)と思っているため、とても惜しい感じです。
動的に定義を追加する方法があればステキなのですが...
(念のため、elysia_cronのスキーマに素手でinsertしてみましたが、elysia_cronが認識してくれませんでした)

引き続き、お知恵をお借りできたらなと思います。

scriptとして登録

blauerberg's picture

cronから実行されるphp関数の定義は先に必要になりますが、
elysia_cron の script に登録する方法だとどうでしょうか?

① APIキー、パラメータ、実行タイミングを画面から登録する
② ①で登録された実行タイミングになったら、APIキーとパラメータでAPIをコールする

だと、

0 1 * * *  call_foo_service_api("FOO_SERVICE_API_KEY", "param1", "param2");
0 2 * * *  call_bar_service_api("BAR_SERVICE_API_KEY", 0, true);

のような感じで admin/config/system/cron/settings の "script" に登録すれば一覧にも表示されます。
call_foo_service_api() と call_bar_service_api() の実装だけ必要になりますが、
この方法だと単純にphp関数を用意するだけでいいので、hook_cron や hook_cronapi として書く必要はありません。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: