遷移服務器遇到django-crontab不執行定時任務問題


django-crontab實現定時任務

1 django-crontab安裝

  • django-crontab安裝:
    pip install django-crontab

  • django-crontab加入:只需要將django-crontab加入到settings.py的INSTALLED_APPS即可。如下代碼:

    INSTALLED_APPS = ( 'django_crontab', ... )

2 django-crontab配置

django-crontab可以定時運行自定義命令和函數兩種方式,因為之前嘗試用command+crontab時已經實現了自定義command,所以自然而然使用了自定義命令這種形式。

2.1 django-crontab定時運行命令

我先參考Django官方文檔自定義了一個命令aizhan_5domain_visits,專門用於抓取愛站流量,並將結果保存在sqlite3數據庫中(具體步驟在本文中不贅述了)。

其次,我在settings.py中加入了django-crontab的命令:

CRONJOBS = [ ('47 11 * * *', 'django.core.management.call_command', ['aizhan_5domain_visits']), ]

意思就是每天11點47分運行aizhan_5domain_visits這個命令。接下來就剩最后一步任務加載了。

2.2 django-crontab定時運行函數

django-crontab也可以定時運行函數,只是在CRONJOBS配置時有差別。CRONJOBS關於函數的配置如下:

CRONJOBS = ( # 初級模式 ('*/5 * * * *', 'myproject.myapp.cron.my_scheduled_job'), # 中級模式 ('0 0 1 * *', 'myproject.myapp.cron.my_scheduled_job', '> /tmp/last_scheduled_job.log'), #高級模式 ('0 0 * * 0', 'django.core.management.call_command', ['dumpdata', 'auth'], {'indent': 4}, '> /home/john/backups/last_sunday_auth_backup.json'), )

分析結果:

  • 初級模式很直觀,意思就是每五分鍾執行一次my_scheduled_job這個程序;
  • 中級模式有個后綴,意思是將程序my_scheduled_job的結果輸出到文件/tmp/last_scheduled_job.log中;
  • 高級模式加入了參數,其中['dumpdata', 'auth']{'indent': 4}都是參數,只是[]中的參數是按照順序代入,而{}中的參數指定了變量名稱,最后一個也是輸出結果的后綴。

3 django-crontab任務加載(注意:服務器遷移過后,一定要查看下原服務器是否有定時任務在執行,如果有,就要在新服務器上從新添加該定時任務腳本,命令如下python manage.py crontab add

django-crontab任務加載比較簡單,只需要運行python manage.py crontab add即可。如果你運行crontab -e可以看到crontab中多了一行:

 * * * /home/aizhan/bin/python /home/aizhan/aizhan/manage.py crontab run c27d1050fb7f87225bcff587ef5a35a3 # django-cronjobs for aizhan

這是django-crontab自動生成的。

  • 如果要移除所有的任務,則運行python manage.py crontab remove;
  • 當你修改了任務,需要再次運行python manage.py crontab add
通過crontab -l 可以看到生成的定時任務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM