Crontab定时运行python程序
2021-05-13 本文已影响0人
逍遥_yjz
centos Crontab基本入门
首先获悉crontab的使用方法后,并使用其定时运行Python程序
1. 编辑定时命令
每分钟,运行一次程序
* * * * * /usr/local/python3.6/bin/python3 /home/dingshi/dingshi.py >> /home/dingshi/crontest.py.log 2>&1
- dingshi.py文件内容
测试功能:读取文件test.txt,并生成一个文件write.txt。
将打印的数据存储到crontest.py.log
# conding:utf-8
import datetime
now_time = datetime.datetime.now()
f = open('/home/dingshi/test.txt','r',encoding='utf-8')
content = f.readline()
print(content.encode('utf-8'))
print('当前时间:',now_time)
f_w = open('/home/dingshi/write.txt','w')
f_w.write(str(content)+'/n')
test.txt的文档内容:
读取txt文档
- 查看结果
crontest.py.log
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:13:01.345693
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:14:01.402996
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:15:01.460378
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:16:01.513332
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:17:01.565980
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:18:01.617715
b'\xe8\xaf\xbb\xe5\x8f\x96txt\xe6\x96\x87\xe6\xa1\xa3'
当前时间: 2021-05-13 13:19:01.669994
# 每天凌晨6分时
6 0 * * * /usr/bin/python3 /home/reptile/py/hoon.py >> /home/reptile/py/crontest_typhoon.log 2>&1
# 每天隔4个小时的十分时,从零点算起
10 */4 * * * /usr/bin/python3 /home/reptile/py/earlyWarning.py >> /home/reptile/py/crontestWarning.log 2>&1
# 每隔8分钟
*/8 * * * * /usr/bin/python3 /home/reptile/pyt/Chart.py
2. 执行的几个坑
2.1 crontab中设定的任务,机器重启后还会有效吗?
重启不会改变crontab的计划 唯一能够影响crontab的操作就是修改齐对应的crontab内容
2.2 绝对路径问题
crontab中python命令使用绝对路径,就算程序中的相对路径也要改为绝对路径
python解释器路径使用绝对路径 查询python解释器路径: which python
脚本文件使用决定路径 查询脚本路径:find / -name xxx.py
2.3 crontab 中调用 anaconda 虚拟环境执行 python 文件
文件:test_juedui.py
#conding:utf-8
import sys
import datetime
import os
path = sys.path[0]
filename = 'a.txt'
filename = os.path.join(path,filename)
with open(filename,'w') as f:
f.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
f.write('\n')
f.write(sys.version) # Python版本
f.write('\n')
* * * * * /root/anaconda3/envs/py38/bin/python /home/test/test_juedui.py >> /home/test/juedui.log 2>&1
[root@iz2zejf0fjkrh3aalbiatoz test]# ls
a.txt juedui.log test_juedui.py
[root@iz2zejf0fjkrh3aalbiatoz test]# cat a.txt
2022-04-22 13:58:01
3.8.13 (default, Mar 28 2022, 11:38:47)
[GCC 7.5.0]
2022-04-22 13:59:01
3.8.13 (default, Mar 28 2022, 11:38:47)
[GCC 7.5.0]
2.4 centos中手动执行python脚本没问题,crontab中执行报错的解决方法
1、执行env指令得到当前的用户环境变量。
2、将PATH环境变量添加到crontab的第一行,如下图所示。
至此问题解决完毕。