在centos系统中默认安装了crontab,可以对其进行设置来进行定时任务,定时任务的最低时间点是分钟
先来介绍一下基本使用吧
可以使用 vim /etc/crontab 打开crontab的配置文件,进行crontab的定时任务的配置
配置格式:
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
另外在执行的任务中如果有输出,可以在任务的后面添加log日志,将输出或执行信息写入到log日志中
添加方式:
eg: 0 * * * * root /root/main.py>>result.log 2>&1
每小时以root的身份执行一次root/main.py文件, 并将执行过程中出现的输出信息或错误信息打印到root/result.log文件中
在执行过程中也可以查看crontab的log日志,查看crontab的执行情况:tail -f /var/log/cron
上面说了基本的crontab的设置,在执行py文件的时候还有一些小坑
1、首先,个人测试需要将添加到crontab执行的文件加上可执行权限:chmod +x xxxx.py
2、其次在py文件的开始第一行需要添加 #!/usr/bin/env pyhton 让文件执行的时候明白调用什么解释器执行
3、最坑的一点就是导包错误,提示:ModuleNotFoundError: No module named 'xxxx'
主要是因为在crontab执行文件的时候不知道应该从哪里加载这些包文件
可以先直接进入python解释器(就是直接写python进入)
>>> import psycopg2
>>> psycopg2.__file__
'/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py'
查看python解释包的位置,我这个位置是'/usr/local/lib/python3.6/site-packages/'
需要在py文件的开始导入这个包之前将这个文件位置
import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')
import psycopg2
目前遇到这些坑,大家有更好的解决方法欢迎一块讨论补充
更新-2018年10月24日(crontab没有上面说的那么复杂)
在使用crontab的时候可以直接使用crontab -e 进行创建任务,如果是第一次使用也许是一个空的文件,可以将/etc/crontab 下面的例子复制一份。另外在使用的时候需要执行的文件可以不用修改为可执行格式,只要指定执行的环境 就可以了。
例如:*/5 * * * * python /dist/BlackFullData.py --> 表示每5分钟,使用python去执行/dist/BlackFullData.py文件