Djangoでバッチ処理を行う(AWS Elasticbeanstalk)

1.Djangoでバッチを動かす

django-kronos を使って極めて簡単に実現できた。

https://github.com/jgorset/django-kronos

プロジェクトルートもしくはアプリケーションにある、cron モジュールを自動で読み込んでくれる。

試しに1時間毎にメールを送るモジュールを書いてみる。

import kronos
from phraseit.service import mail
 
@kronos.register('0 * * * *')
def my_method():
    message = r'this is kronos test mail'
    mail.send_mail('Hiroto Yagi', 'pppiroto@gmail.com', 'krons test', message)

メール送信部分は、先日作成したもの。

よくわからないが、Django management commands でも同様に使えるらしい。

さて、動作原理としては、cron に モジュールの実行を登録するものみたいなので、Windows ではそのまま動かない。

一度 AWS Elasticbeanstalk にデプロイしてみる。

2.登録タスクのリスト

2.1 VirtualEnv の開始

EC2にSSHでログインし、rootになった上で、VirtualEnv を起動。

Last login: Tue Jun 30 13:27:52 2015 from 14-132-74-50.aichieast1.commufa.jp
 _____ _           _   _      ____                       _        _ _
| ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
|  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
                                       Amazon Linux AMI

This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-30-53 ~]$ cd /opt/python/run/venv/bin
[ec2-user@ip-172-31-30-53 bin]$ sudo su
[root@ip-172-31-30-53 bin]# . activate
(venv)[root@ip-172-31-30-53 bin]# 

アプリケーションのデプロイディレクトリに移動し、python manage.py showtasks

(venv)[root@ip-172-31-30-53 bin]# cd /opt/python/current/app
(venv)[root@ip-172-31-30-53 app]# python manage.py showtasks
* List of tasks registered in Kronos *
>> Kronos tasks
    >> my_method
>> Django tasks

タスクが登録されているのがわかる。

2.2 cron に登録

これだけでは、動いてくれないので、cronに登録する。

(venv)[root@ip-172-31-30-53 app]# python manage.py installtasks
Installed 1 tasks.

確認

(venv)[root@ip-172-31-30-53 app]# crontab -l
0 * * * * /opt/python/run/venv/bin/python /opt/python/bundle/47/app/manage.py runtask my_method  --settings=phraseit.settings  $KRONOS_BREAD_CRUMB

root で登録するのが妥当かどうかわからないが、root でやらないと、エラーが出るので安易な方法を選ぶ。

2.3 メールが一時間毎に届く

仕事中にもきっちり毎時0分にメールが届いた。OKOK。

mail_per_hour

2.4 cronタスクの解除

動作確認はとれた。このままだとかなりうっとおしいので、cronタスクを解除しておく。

(venv)[root@ip-172-31-30-53 app]# crontab -r
(venv)[root@ip-172-31-30-53 app]# crontab -l
no crontab for root

メール飛ばなくなった。OK!

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です