crontab
でMezzanine
のタスクを実行しようと設定までしてみたのですが、
PATH
の設定など行わないと動かなさそうなので、
django
上で、スケジュール設定できるかまさぐってみました。
結果、kraiz/django-crontab: dead simple crontab powered job scheduling for django. というのを見つけたので、
インストールしてみます。
環境情報
-
OS
CentOS release 6.7 (Final) -
Python Version
Python 2.7.8 -
Package (必要そうなものだけ抜粋)
Django (1.9.6)
Mezzanine (4.1.0)
インストール&設定
-
pip経由でインストールします。
pip install django-crontab
-
settings.py
にインストールアプリとして追加します。INSTALLED_APPS = ( 'django_crontab', ... )
-
settings.py
に実行したいjob
の定義をします。
CRONJOBS = [
('00 12 * * *', 'django.core.management.call_command', ['ping_all_search_engines'], {'verbose': 0}, '>> /var/log/blog/ping_all_search_engines.log'),
('00 00 * * *', 'django.core.management.call_command', ['purgerequests','6','months'], {'noinput': 0}, '>> /var/log/blog/purgerequests.log'),
]
- 以下のコマンドを実行して、crontabに追加します。
python2.7 manage.py crontab add
- OUTPUT
adding cronjob: (44e7f932600f8a734617cb423a1a48ac) -> (u'00 12 * * *', u'django.core.management.call_command', [u'ping_all_search_engines'], {u'verbose': 0}, u'>> /var/log/blog/ping_all_search_engines.log')
adding cronjob: (88df251cd67c7942f0eb4320559edc95) -> (u'00 00 * * *', u'django.core.management.call_command', [u'purgerequests', u'6', u'months'], {u'noinput': 0}, u'>> /var/log/blog/purgerequests.log')
- 追加したjobの確認
python2.7 manage.py crontab show
- OUTPUT
Currently active jobs in crontab:
44e7f932600f8a734617cb423a1a48ac -> (u'00 12 * * *', u'django.core.management.call_command', [u'ping_all_search_engines'], {u'verbose': 0}, u'>> /var/log/blog/ping_all_search_engines.log')
88df251cd67c7942f0eb4320559edc95 -> (u'00 00 * * *', u'django.core.management.call_command', [u'purgerequests', u'6', u'months'], {u'noinput': 0}, u'>> /var/log/blog/purgerequests.log')
-
crontabを直接確認
crontab -l
-
OUTPUT
{$MEZZANINE_ROOT}
には、MEZZANINE
のインストールディレクトリの絶対パスが出力されます。
00 12 * * * /usr/local/bin/python2.7 /{$MEZZANINE_ROOT}/blog/manage.py crontab run 44e7f932600f8a734617cb423a1a48ac >> /var/log/blog/ping_all_search_engines.log # django-cronjobs for blog
00 00 * * * /usr/local/bin/python2.7 /{$MEZZANINE_ROOT}/blog/manage.py crontab run 88df251cd67c7942f0eb4320559edc95 >> /var/log/blog/purgerequests.log # django-cronjobs for blog
- 動作確認
crontab run {$ハッシュ値}
でcron設定したコマンドのお試し実行が可能です。
python2.7 manage.py crontab run 44e7f932600f8a734617cb423a1a48ac
django-crontab を使うことで何が嬉しいのか
PATH
やdjangoのアプリケーションディレクトリの情報を、
django-crontabが生成してくれるので、jobスケジューリング定義が抽象化され、
ポータビリティが実現できるということが嬉しいポイントなのかと思います。
以上です。
コメント