crontab里经常会调用一些程序,但是很多时候调用python是不成功的,但是手动则是OK的,在看日志(/var/log/cron)的时候,却是显示正常,这种情况怎么破呢?其实主要就是这么几个地方:
1)轻易不要用if __name__ == "__main__";
很多主管都习惯让自己手下人把脚本写成模块化,然后潇洒的走一个整合,但是crontab对这个方法似乎不是很灵光,因为python运行的时候是从if __name__ == "__main__"开始执行,而上面的那些类crontab识别起来很费劲,而只能识别函数,而且本来crontab里放置就是就是一些看门狗脚本,所以尽可能写成流水帐,格式上不要过于复杂。
2)注意中英文,这一点是隐藏的坑点,有些crontab日志显示脚本执行成功,但是把结果重定向到某文件里发现其实是有编码报错的问题;
3)写绝对路径,如果是yum安装,就写/usr/bin/python,如果是自定义安装,就写全路径,脚本文件也写绝对路径;
4)有些python脚本需要涉及到数据库,但是有时候crontab找不到那个具体的数据库,这个时候就需要在python 脚本执行之前重新设定一下环境变量比如WOW_PATH,比如
5)如果以上都不好使,那就在crontab里加上source /etc/profile,如下:
source /etc/profile && python py脚本的绝对路径
时间: 2024-10-11 21:12:41