shell腳本報錯{"errcode":40035,"errmsg":"缺少參數 json"}


今天用shell寫了一個釘釘告警,但是在通過發送信息的那一步,產生一個報錯:{"errcode":40035,"errmsg":"缺少參數 json"}。下面是詳細的shell腳本和報警信息

#!/bin/bash
source ~/.bash_profile
time=$(date "+%Y-%m-%d %H:%M:%S")
webhook='https://oapi.dingtalk.com/robot/send?access_token=efca4349w23b9488aa48f97a14194996e7eb61cbfa51d57a31dffa874e5b1ce2'
HOSTNAME="10.27.228.11"    #數據庫主機IP
PORT="3306"     #端口號
USERNAME="root"     #用戶名
PASSWORD="paopao1818.cn"        #密碼 (如mysql>5.6會提示密碼安全問題,可以正常執行腳本,可以在my.cnf文件中的 [client]  下面加入password   = YourPassword,然后注釋本行即可,意思為將密碼寫到配置文件中,不在shell中明文)

DBNAME="airflow_old"   #數據庫名稱
TABLENAME="import_error"   #數據庫中表的名稱

function SendMsgToDingding() {
    curl $webhook -H 'Content-Type: application/json' -d "
    {
        'msgtype': 'text',
        'text': {
                     'content': '
    標題:airfow
    時間:$time
    告警信息:[${stacktrace}]
    報錯腳本:[${filename}]
    請馬上處理!!!'            
      },
        'at': {
            'isAtAll': true
        }
    }"
}


select_sql="select CONCAT_WS('-',filename,stacktrace,'$') as rows from ${TABLENAME}" 
result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}" | awk 'NR>1'`       #執行sql(如將密碼寫入my.cnf中,刪除 -p${PASSWORD} 即可,因為默認使用了密碼。如此方法行不通,直接  result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -proot ${DBNAME} -e "${select_sql}" | awk 'NR>1'`)
arr=$(echo $result|tr -d "\n\t")       # 查詢到結果去除特殊符號,

echo $arr>arr.log

/bin/rm -rf /home/admin/software/test/mysql.txt
touch /home/admin/software/test/mysql.txt
echo $result>result.log
for s in ${arr[@]}                           # 遍歷數組,寫入hosts文件,根據是否含有逗號做不同處理
do  
   echo ${s}>>s.log
    [[ $s =~ "$" ]] && echo -ne ${s} |grep -v '$'"/n" >> /home/admin/software/test/mysql.txt
    [[ $s =~ "$" ]] || echo -ne ${s}" "  >> /home/admin/software/test/mysql.txt
done
count=`wc -w mysql.txt|awk -F " " '{print $1}'`
count1=`wc -l mysql.txt|awk -F " " '{print $1}'`
echo $count
if [ ${count} -eq 0 ] ; 
then
echo $date"代碼運行正常">>date.log
else
cat mysql.txt|sed  $'s/\'//g' | while read line
do
echo "i的值是:"$i
time=$time
filename=`echo ${line}|awk -F'-' '{print $1}'`
echo "報錯文件" $filename
stacktrace=`echo ${line}|awk -F'-' '{print $2}'`
echo "報錯內容" $stacktrace
SendMsgToDingding
done
fi

當表中的數據import_error是這種狀態的時候,

/home/admin/program/airflow/dags/python/dag/openwork/jobchain/dep_day_84.py (_mysql_exceptions.OperationalError) (1040, 'Too many connections')

 

就會報{"errcode":40035,"errmsg":"缺少參數 json"}這錯誤,我上午搜了一下,有其中一篇文章跟我是同樣的問題,他的報錯原因是出現了空格,然后我也手動去除空格后哈市報這個錯,然后我猜測是特殊字符的問題,而這段內容中我把括號,空格,點還有單引號全試了一遍,最終發現是單引號的問題,那么我就在

cat mysql.txt|sed  $'s/\'//g' | while read line這一步中加了|sed  $'s/\'//g' ,去除單引號,剛剛開始加的時候,是sed -i $'s/\'//g' 這個樣子,
但是會報錯sed: no input files,通過查看才知道不能加i

 

 

 最終去除單引號以后,shell報警能正常發送了。

 

告警效果圖:
標題:airfow
時間:2020-05-07 17:13:44
告警信息:[(_mysql_exceptions.OperationalError) (1040, Too many connections)]
報錯腳本:[/home/admin/program/airflow/dags/python/dag/openwork/jobchain/dep_day_84.py]
請馬上處理!!!@所有人


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM