使用python crontab设置linux定时任务

14 篇文章 0 订阅
14 篇文章 0 订阅

熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务。可以通过命令crontab -e编写任务。当然也可以直接写配置文件设置任务。

crontab的用法:

crontab file [-u user]    用指定的文件替代目前的crontab

crontab - [-u user]    用标准输入替代目前的crontab

crontab  -l [user]    列出用户当前的crontab

crontab -e [user]    编辑用户目前的crontab

crontab -d [user]    删除用户目前的crontab

crontab -c dir    指定crontab的目录

crontab文件的格式:M H D m d cmd

M:分钟(0-59)

H:小时(0-23)

D:天(1-31)

m:月(1-12)

d:一星期中的那一天(0-6,0为周日)

cmd:要运行的程序,程序被送入sh执行

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

python-crontab模块   安装 :pip install python-crontab

创建Crontab任务:

from crontab import CronTab

my_cron  = CronTab(user=True) # 创建当前用户的crontab,当然也可以创建其他用户的,但得有足够权限
job = my_cron.new(command='echo date >> ~/time.log') # 创建任务
job = my_cron.new(command='python /home/kevin/writeDate.py', comment='dateinfo') #创建一个带有注释的 cron 作业
job.setall('*/2 * * * *')# 设置任务执行周期,每两分钟执行一次 
# job.setall(datetime(2000, 4, 2, 10, 2))
my_cron.write() # 最后将crontab写入配置文件

更新一个已存在的Crontab任务:


from crontab import CronTab
 
my_cron = CronTab(user=True)
job = my_cron.new(command='python /home/kevin/writeDate.py',
                  comment='dateinfo') #何创建一个带有注释的 cron 任务
job.setall('*/2 * * * *')
my_cron.write()

for job in my_cron:
    if job.comment == 'dateinfo':
        job.hour.every(10)
        my_cron.write()

从 Crontab 中清除任务:

from crontab import CronTab
 
my_cron = CronTab(user=True)
for job in my_cron
    if job.comment == 'dateinfo':
        my_cron.remove(job)
        my_cron.write()
my_cron.remove(comment='dateinfo') #你可以直接调用 my_cron上的 remove 方法,而无需任何迭代
my_cron.remove_all() #要从 crontab 中删除所有的作业
my_cron.write() #最后,完成更改后,别忘了使用以下命令将其写回到crontab

# 当然还支持其他更人性化的设置方式,简单列举一些
job.minute.during(5,50).every(5)
job.hour.every(4)
job.day.on(4, 5, 6)
 
job.dow.on('SUN')
job.dow.on('SUN', 'FRI')
job.month.during('APR', 'NOV')
 
job.setall(time(10, 2))
job.setall(date(2000, 4, 2))
job.setall(datetime(2000, 4, 2, 10, 2))
 
# 同时可以给任务设置comment,这样就可以根据comment查询,很方便
job.set_comment("time log job")
# 根据comment查询,当时返回值是一个生成器对象,不能直接根据返回值判断任务是否#存在,如果只是判断任务是否存在,可直接遍历my_user_cron.crons
iter = my_user_cron.find_comment('time log job')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值