alist状态监控

原理:

拉取一个alist文件并获取下载的md5与原始的md5进行对比,若md5值一致则正常,状态轮询周期60秒,若状态与上次不一致钉钉预警,否则保持不再钉钉预警!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/bash
#下载alist中阿里云挂载的dsm中文件进行对比,若对比失败,表示链接失效,推送给钉钉
#钉钉机器人地址
WEBHOOK='https://oapi.dingtalk.com/robot/send?access_token=a7258d148939e3028aa80e1b76ef7c7b26dad13f0e402c42f51dea212c0ca493'
#加签关键字,只有包含这个关键字的消息才会被发送
JQ=ffing
#钉钉推送信息
SITE="alist_DSM"


#源文件md5:/DSM/kaerlol/2023年01月/卡尔2023-01-08号停播
SRC_MD5=2654bd908f3ab6e8f1c47270ac8f278d

#下载对比文件
DOWN_URL=http://pan.ffing.cn/d/DSM/kaerlol/2023%E5%B9%B401%E6%9C%88/%E5%8D%A1%E5%B0%942023-01-08%E5%8F%B7%E5%81%9C%E6%92%AD
DOWN_FILE=/tmp/alist_dsm.txt

#sh
SHPATH=`readlink -f $0`
SHDIR=`dirname $SHPATH`
#log_dir
LOG_DIR=$SHDIR/logs
mkdir -p $LOG_DIR
#LOG
LOG=$LOG_DIR/run.log



#循环检测
while true 
do
        echo "------------ `date +%F_%T`----------------" >$LOG
        #循环检测5次
        for i in `seq 5`
        do
        wget -t 3 --timeout=10 $DOWN_URL -O $DOWN_FILE >/dev/null
        DOWN_MD5=`md5sum $DOWN_FILE|awk '{print $1}'`

        if  [ "$SRC_MD5"  == "$DOWN_MD5"   ];then
        echo '正常' >>$LOG
        else
        echo '异常' >>$LOG
        fi
        sleep 20
        done
        #统计异常出现2次以上,则为异常
        if [ `cat $LOG|grep 异常|wc -l`  -ge 2 ];then
        NOW_STAT=异常
        else
        NOW_STAT=正常
        fi
        NOW_DATE=`date +%F_%T`
        NOW_S=`date +%s`
        #若本次与上传不一致则,则钉钉
        if [ ! $NOW_STAT == $LAST_STAT   ];then
        MS=" $SITE 状态发生变化: $NOW_STAT \n ---上次变更时间:$LAST_DATE \n ---本次变更时间:$NOW_DATE \n ---变更时间差为:$((NOW_S - LAST_S)) 秒"
        curl $WEBHOOK -H 'Content-Type: application/json'  -d "{\"msgtype\": \"text\",\"text\": {\"content\":\" $JQ$MS \"}}"
        fi
        LAST_STAT=$NOW_STAT
        LAST_DATE=$NOW_DATE
        LAST_S=$NOW_S     
done