公众号

利用Linux的crontab实现定时执行python任务

让Python脚本定时启动

准备好定时启动的脚本auto.py
用root权限编辑以下文件

1
sudo vim /etc/crontab

在文件末尾添加以下命令

1
2 * * * * root /usr/bin/python3.5 /home/edgar/auto.py > /home/edgar/auto.log

以上代码的意思是每隔两分钟执行一次脚本并打印日志。 (python3.5的路径和文件路径必须是绝对路径)

crontab编写解释

基本格式

          • user command
            分 时 日 月 周 用户 命令

举例说明

1、每分钟执行一次

1
* * * * * user command

2、每隔2小时执行一次

1
* */2 * * * user command (/表示频率)

3、每天8:30分执行一次

1
30 8 * * * user command

4、每小时的30和50分各执行一次

1
30,50 * * * * user command(,表示并列)

5、每个月的3号到6号的8:30执行一次

1
30 8 3-6 * * user command (-表示范围)

6、每个星期一的8:30执行一次

1
30 8 * * 1 user command (周的范围为0-7,0和7代表周日)

crontab命令

1
2
3
4
5
6
7
8
9
10
11
service crond start #启动
service crond stop #关闭
service crond restart #重启
service crond reload #重新载入配置
crontab -e 命令添加定时任务
crontab -l 查看定时任务

检查crontab 任务执行情况,可以查看log 文件 /var/log/cron

也可以使用python-crontab包来设置

如:

安装直接
$ pip install python-crontab
下面在脚本上就可以方便的设置计划任务了
from crontab import CronTab

# 创建当前用户的crontab,当然也可以创建其他用户的,但得有足够权限

my_user_cron = CronTab(user=True)

# 创建任务

job = my_user_cron.new(command='/usr/bin/python3.5 /home/edgar/auto.py')

# 设置任务执行周期,每两分钟执行一次

job.setall('*/2 * * * *')

# 当然还支持其他更人性化的设置方式,简单列举一些

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

# 同时还支持根据command和执行周期查找,基本类似,不再列举

# 任务的disable和enable, 默认enable

job.enable(False)

job.enable()

# 最后将crontab写入配置文件

my_user_cron.write()

下面可通过命令查看,是否创建成功:

$ crontab -l

最后想说:Star me on GitHub 欢迎 Star

🙈坚持原创技术分享,您的支持将鼓励我继续创作🙈
显示 Gitment 评论