0%
- 上周五用python2实现了一个简易的canal监控报警脚本(主要就是检测时间戳,超时就进行邮件通知),脚本不太复杂,上传到线上服务器之后,直接运行一切正常,模拟了一下错误数据,也正常发出了邮件通知。然后就配置了一下crontab定时任务,每5分钟执行一次检测,本来以为万事大吉,谁知道部署之后,日志什么的都正常更新了,唯独就是邮件没有发送出去。
- 问题排查:
- 本地运行正常,服务器直接通过python monitor.py 执行,也正常。唯独就是通过crontab执行不正常,只是记录了日志,没有进行邮件通知。
- 开始怀疑是程序中引用路径有问题,crontab执行命令不是在monitor脚本目录执行,获取sys.args[0]路径可能有问题,全都替换成绝对路径,问题依旧。
- 无解,谷歌百度一番之后,有人说执行shell脚本,要使用/bin/bash /path/shell.sh,这样才能正常运行,那我这个估计也是这个原因。修改crontab命令使用: /usr/bin/python /data/monitor.py 重于收到了久违的邮件,至此问题解决。
- 原因:
- 初步怀疑直接运行python /data/monitor.py 可能会使用其他版本的python(python3),我的脚本使用python2写的(已知账户均有python2,没有python3环境,懒得找运维-0-),其中用到了print xxx的语法,由于我没有root权限,这个暂时不进行验证了。
- 总结:
- 使用crontab所有命令,执行器都要使用绝对路径,免得引起不必要的麻烦-0-!