Python-crontab和Django-crontab 實現(xiàn)定時任務(wù)

Linux中可以使用crontab設(shè)置定時任務(wù),可以通過命令crontab -e編寫任務(wù),也可以直接寫配置文件設(shè)置任務(wù)。

Python-crontab實現(xiàn)定時任務(wù)

1、安裝

pip install python-crontab

2、使用

封裝一個類,用來新增和清除定時任務(wù):

# coding=utf-8

? ? from crontab import CronTab


? ? class Crontab_Update(object):


? ? ? ? def __init__(self):

? ? ? ? ? ? # 創(chuàng)建當(dāng)前用戶的crontab,當(dāng)然也可以創(chuàng)建其他用戶的,但得有足夠權(quán)限

? ? ? ? ? ? self.cron = CronTab(user=True)

? ? ? ? ? ? # self.cron = CronTab(user='website')


? ? ? ? def add_crontab_job(self, cmmand_line, time_str, commont_name, user):

? ? ? ? ? ? # 創(chuàng)建任務(wù)

? ? ? ? ? ? job = self.cron.new(command=cmmand_line)

? ? ? ? ? ? # 設(shè)置任務(wù)執(zhí)行周期

? ? ? ? ? ? job.setall(time_str)

? ? ? ? ? ? # 給任務(wù)添加一個標(biāo)識,給任務(wù)設(shè)置comment,這樣就可以根據(jù)comment查詢

? ? ? ? ? ? job.set_comment(commont_name)

? ? ? ? ? ? # 將crontab寫入配置文件

? ? ? ? ? ? # self.cron.write()

? ? ? ? ? ? self.cron.write_to_user(user=user)? # 指定用戶,寫入指定用戶下的crontab任務(wù)


? ? ? ? def del_crontab_jobs(self, comment_name, user):

? ? ? ? ? ? # 根據(jù)comment查詢,當(dāng)時返回值是一個生成器對象,

? ? ? ? ? ? # 不能直接根據(jù)返回值判斷任務(wù)是否存在,

? ? ? ? ? ? # 如果只是判斷任務(wù)是否存在,可直接遍歷my_user_cron.crons

? ? ? ? ? ? # jobs = self.cron.find_comment(commont_name)


? ? ? ? ? ? # 返回所有的定時任務(wù),返回的是一個列表

? ? ? ? ? ? # a = self.cron.crons

? ? ? ? ? ? # print 'a = ', a

? ? ? ? ? ? # print 'len(a) = ', len(a)


? ? ? ? ? ? # 按comment清除定時任務(wù)

? ? ? ? ? ? # self.cron.remove_all(comment=comment_name)


? ? ? ? ? ? # 按comment清除多個定時任務(wù),一次write即可

? ? ? ? ? ? self.cron.remove_all(comment=comment_name)

? ? ? ? ? ? self.cron.remove_all(comment=comment_name+ ' =')


? ? ? ? ? ? # 清除所有定時任務(wù)

? ? ? ? ? ? # self.cron.remove_all()


? ? ? ? ? ? # 寫入配置文件

? ? ? ? ? ? # self.cron.write()

? ? ? ? ? ? self.cron.write_to_user(user=user)? # 指定用戶,刪除指定用戶下的crontab任務(wù)


? ? if __name__ == "__main__":

? ? ? ? print 'start --------'

? ? ? ? cmmand_line = "/usr/bin/python /mnt/print_time.py"

? ? ? ? time_str = "* * * * *"

? ? ? ? commont_name = "Test_Crontab_Job"

? ? ? ? user = "xue"

? ? ? ? # 創(chuàng)建一個實例

? ? ? ? crontab_update = Crontab_Update()


? ? ? ? # 調(diào)用函數(shù)新增一個crontab任務(wù)

? ? ? ? # print '&&&&&& add_crontab_job '

? ? ? ? # crontab_update.add_crontab_job(cmmand_line, time_str, commont_name, user)


? ? ? ? print '&&&&&& del_crontab_jobs '

? ? ? ? crontab_update.del_crontab_jobs(commont_name, user)

? ? ? ? print 'end -------'

定時任務(wù)執(zhí)行的python腳本如下:print_time.py

# coding=utf-8

? ? import datetime


? ? # datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")


? ? with open('/mnt/datetime_log.txt', 'a') as f:

? ? ? ? f.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")+"\n")

? ? f.close()

可通過命令查看,是否創(chuàng)建成功,crontab -l

官方文檔https://pypi.python.org/pypi/python-crontab

Django-crontab 實現(xiàn)定時任務(wù)

github:https://github.com/kraiz/django-crontab

1、安裝

pip install django-crontab

2、添加 app

在 settings.py 文件中添加django-crontab:

INSTALLED_APPS = (

? ? ...

? ? 'django_crontab',

)

3、配置

django-crontab 可以定時執(zhí)行自定義命令或函數(shù)

定時函數(shù)

在django項目的settings.py中添加以下命令

CRONJOBS = [

? ? # 定時函數(shù)每分鐘執(zhí)行一次

? ? ('*/1 * * * *', '你的app名.定時函數(shù)所在的py文件名.定時函數(shù)名'),

? ? # 將定時函數(shù)執(zhí)行結(jié)果輸出到指定文件(如果該路徑或文件不存在將會自動創(chuàng)建)

? ? ('*/1 * * * *', '你的app名.定時函數(shù)所在的py文件名.定時函數(shù)名', '>> 輸出文件路徑和名稱')

? ? ('*/1 * * * *', 'home_spider.homelink.views.home_spider')

]

定時命令

CRONJOBS = (

? ? # 每天早上6點執(zhí)行命令

? ? ('0 6 * * *', 'django.core.management.call_command', ['要執(zhí)行的命令']),

)

操作命令

查看系統(tǒng)中已有的定時任務(wù):

python manage.py crontab show

添加和修改定時任務(wù):

python manage.py crontab add

刪除定時任務(wù):

python manage.py crontab remove

解決中文字符問題

在定時任務(wù)中,如果出現(xiàn)非英文字符,會出現(xiàn)字符異常錯誤crontab錯誤,可以通過在配置文件中添加定時任務(wù)執(zhí)行的附加命令來實現(xiàn)

解決crontab中文問題

CRONTAB_COMMAND_PREFIX = 'LANG=zh_cn.UTF-8'```

開啟定時任務(wù)

添加定時任務(wù)到系統(tǒng)中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,329評論 0 10
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個如下例子,分析運行結(jié)果: 代碼一: a = 1 def...
    伊森H閱讀 3,177評論 0 15
  • Python語言特性 1 Python的函數(shù)參數(shù)傳遞 看兩個如下例子,分析運行結(jié)果: 代碼一: a = 1 def...
    時光清淺03閱讀 567評論 0 0
  • 1、前言 在做 django 開發(fā)需求時,多多少少都會遇到需要定時任務(wù)的功能,比如定時執(zhí)行任務(wù),檢查訂單之類的???..
    iHTCboy閱讀 9,227評論 0 6
  • 結(jié)束2017年的收尾工作,回鄉(xiāng)臨行前一晚偶然看到一張一直很喜歡的女作家陶立夏發(fā)在公號的圖片,配圖文字是:語言最...
    南方姑娘NF閱讀 139評論 0 1

友情鏈接更多精彩內(nèi)容