この記事は 約 1分46秒 で読めます。
ちょっとハマったので手順を残しておきます。
結論から言うとdocker-compose.ymlにてuwsgiと一緒にcronを起動する方法で定期的に実行してくれるようになりました。
1 |
command: bash -c "cron && uwsgi --socket :8001 --module mysite.wsgi" |
このログは、こちらのレポジトリでDjango+Dockerセットアップ後の環境を想定しています。
Cronのインストール
まずはdjangoコンテナに入り、Cronをインストールして使えるようにしておきます。
1 2 |
docker-compose exec django bash apt-get update && apt-get install -y cron |
Django_crontabのインストール
djangoにはカスタムコマンドをCronで実行させる方法がありますが、やや手順が多いため、Django_crontabというモジュールを使って楽をします。
続いて、モジュールをインストールします。
1 |
pip install django-crontab |
Cron実行ファイル作成
任意の場所に実行ファイルを配置します。念の為アプリケーションフォルダの直下などがよさそうです。
1 2 |
def do_something(): # do something |
settings.py編集
Django_crontabとCronの登録をします。
1 2 3 4 5 6 7 8 9 10 |
INSTALLED_APPS = [ ... # 追加 'django_crontab', ] # CRON CRONJOBS = [ ('*/1 * * * *', 'app.cron.do_something', '>> /app/django/app/scheduled_job.log 2>> /app/django/app/scheduled_job_error.log') ] |
「*/1 * * * *」が実行間隔(例では1分ごと)、「app.cron.do_something」が実行関数までのパス、「scheduled_job.log」が成功した際のログ、「scheduled_job_error.log」がエラーを起きた際のログが出力されます。
この辺は自由に変えられます。
Cronジョブ登録
以下のコマンドでジョブの追加や削除できます。
1 2 3 |
docker-compose exec django python manage.py crontab add docker-compose exec django python manage.py crontab show docker-compose exec django python manage.py crontab remove |
DockerもCronも詳しくなくてかなりハマりました。
以上です。