cronのないGoogle App Engineで1日に1回程度の処理をする方法

「cronないのかー、じゃあ○○でやるかー」とすぐに思いついた方法なのでブログに書くまでもないと思っていたのだけど「公開してないの?」と言われたので書いておく。使うのならばくだらないバッドノウハウであることを十分理解した上で自己責任でどうぞ。


ある程度アクセスのあるサイトで、1日1回程度の間隔を置いて処理をしたい場合。かつ、定期的処理のタイミングが厳密に特定時刻である必要がない場合、memcached APIをつかえばいい。あるキーを監視してexpireしているときにはある処理し、完了したときに24 * 60 * 60秒でexpireする値をそのキーで入れる。これでOK。もちろんこの方法だと徐々に実行される時刻が進んで行くのでそれが嫌なら「次の午前3時までの秒数」なんかをつかうのも手だ。


このキー監視はなるべく頻繁にキックされたいけども、処理に時間がかかることでユーザをいらつかせるのは避けたい。そこでfavicon.icoへのアクセスでキックしている。


ソーシャルスキルの高い人向けのもっと簡単な解決法:「ねえ、cronでこのURL叩いてくれない?」とサーバを持っている友達に言う