OpenShiftを使って定期的なタスクを実行する方法です。
例えば、OpenShiftで運用しているブログやWebサービスの定期バックアップを取ったり、FacebookやTwitterへ定期投稿したりなどです。
cronカートリッジを使用する
Openshiftアプリは各種カートリッジを追加することで、いろいろなサービスを追加することができます。
MongoDBやMySQL、Jenkinsカートリッジなど。
その中にあるCronカートリッジを使用することで定期処理をアプリに追加することができます。
アプリページの「see the list of cartridges you can add」をクリック。
定期処理を実装
Cronカートリッジを追加すると、下記フォルダが追加されていると思います。
~/app-root/runtime/repo/.openshift/cron
cronフォルダの中には、
・daily
・hourly
・minutely
・monthly
・weekly
があって、それぞれ実行されるタイミングになっています。
定期処理を行う場合は、対象のフォルダに、jobs.allow、jobs.deny、実行するスクリプトファイルを作成して。
jobs.allowにスクリプトファイル名を記載すればOKです。
なお、jobs.denyには実行する必要のないファイルを記載します。
例:
-daily
-jobs.allow
-jobs.deny
-task
-memo
<jobs.allow>
task
<jobs.deny>
memo
としておけば、1日おきにtaskが実行されます。memoは実行されません。
5分おきとか時間を指定したい場合
どうやらできない?ようです。
それぞれのスクリプトの中で時間判定処理を追加することで一応実現は可能です。
参考:Run CRON job every 5 minutes on OpenShift (Red Hat Cloud)
ちなみに、dailyにセットしたスクリプトが実行される時刻は3:30 EST(日本時間:17:30)頃でした。
あとがき
Facebookへの自動投稿を作るときに使用しました。
最初はdjango-celeryを使ってみようと思ったのですが、上手く動かず断念。
Cronを使うことにしたのですが、後からopenshift-celery-cartridgeを発見しました。
次の機会があったら試して見たいと思います。
ではでは~。