一、背景
通过python脚本定时执行脚本,手动执行正常,但是放到定时任务中就异常了。
二、环境
操作系统:CentOS release 6.5 (Final)
python版本:Python 3.6.13
三、报错信息
# cat test.log
Traceback (most recent call last):
File "/home/test.py", line 7, in <module>
print(ilstr)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)
四、整个python脚本
#!/usr/bin/python3
# coding: utf-8
ilstr="测试测试"+",测试2测试2。"
print(ilstr)
五、crontab配置
# crontab -l
* * * * * /usr/bin/python3 /home/test.py >>/home/test.log 2>&1
六、诡异现象
奇怪的是,完全一样的脚本,使用crontab跑定时任务就会报上面的错误,但是手动执行就完全没有问题:
# ./test.py
测试测试,测试2测试2。
七、原因分析
crontab执行脚本时的环境变量跟直接以root用户身份手动执行的时候环境变量不同。
八、解决办法
在/etc/crontab文件中添加一条载入命令source即可:经过测试这种方法生效了,没有再报错。
# crontab -l
* * * * * source /etc/profile && /usr/bin/python3 /home/test.py >>/home/test.log 2>&1
————————————————
版权声明:本文为CSDN博主「limuitech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhuangzi123456/article/details/102597032
0