最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
使用crontab定时工具定时运行python脚本
时间:2016-10-07 编辑:简简单单 来源:一聚教程网
之前使用crontab经常遇到一些问题,例如脚本不执行的问题,报错问题,在这里记录一下过程,先介绍一个python工具,可以自动更改和生成crontab运行脚本,使用起来非常友好: plan
一、安装
$ pip install plan
二、创建任务脚本
from plan import Plan
cron = Plan()
# register one command, script or module
# cron.command('command', every='1.day')
# cron.script('script.py', path='/web/yourproject/scripts', every='1.month')
# cron.module('calendar', every='feburary', at='day.3')
if __name__ == "__main__":
cron.run()
也可以使用下面命令自动创建,会在 schedule 目录下生成一个 schedule.py 文件
$ mkdir schedule
$ cd schedule
$ plan-quickstart
三、使用
直接在crontab配置文件中使用执行python脚本遇到了好多坑,最后还是使用sh脚本来运行,我们在schedule目录下创建一个文件夹 bash ,新增一个sh脚本文件 OneMinitesTask.py
#!/bin/sh
# 当前路径为: schedule/bash
cd ..;
# 激活虚拟环境
source env/bin/activate;
# 执行python脚本
python OneMinitesTask.py
# 退出虚拟环境
deactivate
下面是 schedule.py
from plan import Plan
# 获取bash路径(由于这里依赖于getcwd方法,所以要确保运行目录为当前目录)
bash_path = os.path.abspath(os.path.join(os.getcwd(), "bash"))
cron = Plan()
# 添加一个任务,每分钟执行一次TenMinutesTask.sh脚本
# 这里的every参数详细介绍见官网:http://plan.readthedocs.io/job_definition.html#every
job = Job('./OneMinutesTask.sh > hello.txt', path=bash_path, every='1.minute')
# 添加到plan上,可以添加多个job
cron.job(job)
if __name__ == "__main__":
# 输出到文件,覆盖原有的任务,这里还有其他的参数,详情见官网:http://plan.readthedocs.io/run_types.html
cron.run('white')
运行脚本
$ cd schedule
$ python schedule.py
[write] crontab file written
查看crontab任务
$ crontab -l
# Begin Plan generated jobs for: main
* * * * * cd /home/ubuntu/schedule/bash && ./OneMinutesTask.sh
# End Plan generated jobs for: main
ok,测试运行成功,使用python脚本配置crontab运行脚本可读性更强,更好维护
四、常见问题
1. 不确定任务是否运行,可以到 /var/log/cron.log 查看crontab的运行日志
$ vim /var/log/cron.log
使用 Shift+G 跳到最后一行
如果没有日志也可能是log服务没有开启,到 /etc/rsyslog.d/50-default.conf 查看 cron.* /var/log/cron.log 一行是否被注释掉了,如果注释掉了,把注释关了
sudo vim /etc/rsyslog.d/50-default.conf
# 修改完后重启rsyslog
$ sudo service rsyslog restart
-
上一个: python批量下载豆瓣图片代码