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

1.Djangoでバッチを動かす

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

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

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

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

  1. import kronos
  2. from phraseit.service import mail
  3. @kronos.register('0 * * * *')
  4. def my_method():
  5. message = r'this is kronos test mail'
  6. 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 を起動。

  1. Last login: Tue Jun 30 13:27:52 2015 from 14-132-74-50.aichieast1.commufa.jp
  2. _____ _ _ _ ____ _ _ _
  3. | ____| | __ _ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
  4. | _| | |/ _` / __| __| |/ __| _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
  5. | |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
  6. |_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
  7. Amazon Linux AMI
  8.  
  9. This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
  10. WILL BE LOST if the instance is replaced by auto-scaling. For more information
  11. on customizing your Elastic Beanstalk environment, see our documentation here:
  12. http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
  13. [ec2-user@ip-172-31-30-53 ~]$ cd /opt/python/run/venv/bin
  14. [ec2-user@ip-172-31-30-53 bin]$ sudo su
  15. [root@ip-172-31-30-53 bin]# . activate
  16. (venv)[root@ip-172-31-30-53 bin]#

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

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

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

2.2 cron に登録

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

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

確認

  1. (venv)[root@ip-172-31-30-53 app]# crontab -l
  2. 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タスクを解除しておく。

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

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

Follow me!

コメントを残す

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