監聽/監控 主機的服務或API是否活著

緣由

由於主機內部的Golang程式,會因為不明原因Crash 服務被 kill掉

造成API連線不到,需要監聽來第一時間告知發生問題,緊急處理

可以用來監聽 API 是否是正常的 200 回應

或是 主機的服務是否正常

如果不正常可以透過Line Notify 通知之類的

錯誤訊息

1
Failed to connect to localhost port 7777 after 75203 ms: Operation timed out

監聽API的script

1
2
3
4
5
6
7
8
#!/bin/sh

http_code=$(curl -X POST -s -o /dev/null -w "%{http_code}" http://localhost:7777)
if [ $http_code != 200 ]; then
curl -H "Authorization: Bearer token" \
-d "message=無法連線" \
https://notify-api.line.me/api/notify
fi

監聽Service Port的script

1
2
3
4
5
6
7
8
#!/bin/sh

nc -4z 127.0.0.1 3306
if [ $? = 1 ]; then
curl -H "Authorization: Bearer token" \
-d "message=MySQL無法連線" \
https://notify-api.line.me/api/notify
fi

$? 是什麼意思?

最後一次執行的結果

This is the exit status of the last executed command.

參考網站:https://stackoverflow.com/questions/7248031/meaning-of-dollar-question-mark-in-shell-scripts

加入排程

每5分鐘監聽一次確認是否正常

1
*/5 * *  *  * root /check_live.sh > /dev/null

遇到問題

排程時間到但沒有發動執行

查看Log是否有真實執行

Freebsd 的主機 Cron Log 位置

1
2
3
$ vim /var/log/cron

Oct 6 16:50:00 www /usr/sbin/cron[20867]: (root) CMD (/root/bin/check_live.sh > /dev/null)

Linux 的主機 Cron Log 位置

1
2
3
$ tail -f  syslog |grep CRON

Oct 6 17:25:01 localhost CRON[1284]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

加上可執行的權限

查了資料才知道,要 +x 才可以讓 sh 的檔案可執行

1
$ chmod +x check_live.sh

確認沒問題,收到推播訊息,大功告成 Ya