Posted by starbucks.espre... on June 19, 2016 at 8:05am
以下について、ご相談させてください。
▼実現したいこと
外部の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 でできそうに見えます
elysia_cronの API.txt を見ると
なので、hook_cronapi でCronで実行したい単位に分けて実装したcallbackを複数登録すれば、
目的のことができるのではないかと思います。
上記の API.txt にサンプル実装もあるので、参考になると思います。
hook_cronapi
確かに実行したい単位で登録できました。
ただし、上記方法ですと、hook_cronapiで事前に定義が必要なのですよね。
画面から1つの設定をしたらelysia_cronのCron Settings画面の
一覧に表示させたい(elysia_cronの制御下に置きたい)と思っているため、とても惜しい感じです。
動的に定義を追加する方法があればステキなのですが...
(念のため、elysia_cronのスキーマに素手でinsertしてみましたが、elysia_cronが認識してくれませんでした)
引き続き、お知恵をお借りできたらなと思います。
scriptとして登録
cronから実行されるphp関数の定義は先に必要になりますが、
elysia_cron の script に登録する方法だとどうでしょうか?
だと、
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 として書く必要はありません。