问题场景
项目某个业务是将python脚本原封不动地下发到linux机器上,然后通过机器上open-falcon的agent模块调度执行脚本。结果查看生产环境的agent日志,发现agent调度执行脚本时报错了。
问题排查
先让运维在机器上手动执行,看下是否有问题
python 脚本名.py
发现没有问题,脚本运行正常。但是为什么agent调度执行就不行呢?
问同事才知道agent内部调度执行时,不是用上述命令跑的,而是
./脚本名.py
于是用该命令手动执行脚本,发现报的错和生产一样!虽然现在还不知道具体原因,但至少本地能重现了,从而方便我们找到问题。
最后对比了一下正常执行的脚本文件格式,发现出错的脚本文件头存在空行,如下
- 正常的脚本
#!/usr/bin/env python
#coding:utf-8
- 出错的脚本
#!/usr/bin/env python
#coding:utf-8
问题分析
通过./脚本名.py
执行时,linux可能会把它当作普通shell执行,这时对格式有严格要求;而使用python 脚本名.py
执行时,就没有这个限制。
问题解决
去掉文件头的空行。