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)中