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


参考

コメント