Mezzanine django-crontab をインストールしてジョブスケジュールをしてみる


crontabMezzanineのタスクを実行しようと設定までしてみたのですが、
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スケジューリング定義が抽象化され、
ポータビリティが実現できるということが嬉しいポイントなのかと思います。
以上です。


参考

コメント