一、报错描述
在测试报警媒介时,报错如下:
main.py脚本是在windows上的pycharm上编写的,在windows上运行没有问题,放在linux服务器上使用python3 main.py 运行也没有问题,但是使用./main.py执行就报错
[root@p0-tkhijbs-broadco-app02 alertscripts]# ./main.py pangbb 测试主题 测试消息
-bash: ./main.py: /bin/python3^M: bad interpreter: No such file or directory
这说明zabbix 也是使用./的形式执行报警脚本的。
二、报错原因
[root@p0-tkhijbs-broadco-app02 alertscripts]# file main.py
main.py: Python script, ASCII text executable, with CRLF line terminators
[root@p0-tkhijbs-broadco-app02 alertscripts]# cat -v main.py
#!/bin/python3^M
^M
^M
from send_feishu import config,get_token^M
from send_feishu.check_user_id import check_user_id^M
import requests,json,sys,time^M
^M
^M
oa_num = sys.argv[1]^M
subject = sys.argv[2]^M
context = sys.argv[3]^M
此时发现会在每行行末加多一个^M,Linux不识别,具体可以查看CRLF和LF的区别。
三、解决办法
1.方法1
修改pycharm配置
点击 文件 --> 设置 --> 编辑器 —> 代码样式 --> 行分隔符 改为 “Unix和macOS(\n)”
2.方法2
使用vim 打开文件
末行模式输入
:set ff 或 :set fileformat
得到结果如下:
fileformat=dos(Windows上的文件格式) 或 fileformat=unix(Linux上的文件格式)
修改文件格式为unix
set ff=unix 或者 set fileformat=unix
回车之后没反应,wq保存即可。