首先在crontab中python脚本后生成log文件以便分析,其中1、2分别为stdout和stderr,双大于号为追加记录而非覆盖(如担心log文件累积太大也可改为单大于号)~/anaconda2/bin/python ~/future_dominant_contract/fdc.py>> /root/future_dominant_contract/fdc.log 2>&1;
查看log文件发现导入包报错,no module named pandas,因常用包肯定已经安装,则考虑是python安装时未将路径注入系统变量,echo $PYTHONPATH果然发现没有任何python路径;
手动执行python脚本正常是因为shell中默认使用的是anaconda的python,可进入python shell——import sys——sys.path证实;
crontab无法执行可能是因为crontab使用原生python(暂未知如何查看crontab的python版本);
思路明确,应该在crontab中指定python版本为anaconda的,而不能直接python(此python版本为crontab的)+脚本.py,~/anaconda2/bin/python~/future_dominant_contract/fdc.py >> /root/future_dominant_contract/fdc.log 2>&1;
通过tail -f /var/log/cron.log动态观察crontab是否正常执行完;
查看fdc.log文件确认此次python脚本可正常运行。
总结debug思路如下:
首先是查找报错原因,可以使用log、断点调试、execute selected codes或者直接print;
其次理解分析报错原因,本例中报错原因容易归因,但如果是其他报错内容极其复杂难懂的情况,最好放弃此种出错功能的解决思路,转而基于get things done原则寻求其他解决方式,条条大路通罗马不能在一条路上被堵死;
最后,做出出错假设后控制变量、分步执行,直至验证对错误的判断并逐步修复之;
最最后,如果不行,重复以上步骤。
领取专属 10元无门槛券
私享最新 技术干货