由于,自己开发应用程序部署后,是不是有异常,需要及时收到通知。本文介绍如何使用 Shell 编写一个监控脚本,用于监控程序的运行状态,并在程序异常时发送通知钉钉或者邮件。

暂时没有使用 mail,mail 需要安装配置才能使用。而且,有好多 mail 工具,等选好使用后在补充。

# 监控端口脚本

monit_port.sh
#!/bin/bash
# 钉钉 Webhook URL
DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=your_access_token"
# 邮件配置
#MAIL_TO="[email protected]"  # 收件人的邮箱地址
#MAIL_FROM="[email protected]"   # 发件人的邮箱地址
#MAIL_SUBJECT="Gin Application Port Alert"
#MAIL_BODY="Gin application port 8080 is not available. Please check the server."
# 检查的端口
PORT=8080
HOST=localhost
# 状态文件
STATUS_FILE="/tmp/port_status"
# 发送钉钉通知
send_dingtalk_alert() {
    curl -s -X POST "$DINGTALK_WEBHOOK" \
        -H "Content-Type: application/json" \
        -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"Gin application port $PORT is not available. Please check the server.\"}}"
}
# 发送邮件通知
#send_email_alert() {
#    echo "$MAIL_BODY" | mail -s "$MAIL_SUBJECT" "$MAIL_TO" #发送一封简单的邮件
#    # echo "This is the email body" | mail -r "MAIL_FROM" -s "$MAIL_SUBJECT" "$MAIL_TO" #可以使用 -r 选项指定发件人
#}
# 发送警报
send_alert() {
    send_dingtalk_alert
#    send_email_alert
}
# 检查端口状态
check_port() {
    timeout 5 telnet $HOST $PORT </dev/null 2>&1 | grep -q 'Connected'
    return $?
}
# 主函数
main() {
    if [ ! -f "$STATUS_FILE" ]; then
        echo "UP" > "$STATUS_FILE"
    fi
    check_port
    CURRENT_STATUS=$?
    LAST_STATUS=$(cat "$STATUS_FILE")
    if [ $CURRENT_STATUS -ne 0 ] && [ "$LAST_STATUS" == "UP" ]; then
        # 端口变为不可用
        send_alert
        echo "DOWN" > "$STATUS_FILE"
    elif [ $CURRENT_STATUS -eq 0 ] && [ "$LAST_STATUS" == "DOWN" ]; then
        # 端口恢复可用
        echo "UP" > "$STATUS_FILE"
    fi
}
main

# 监控应用进程脚本

monit_process.sh
#!/bin/bash
# 钉钉 Webhook URL
DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=your_access_token"
# 邮件配置
#MAIL_TO="[email protected]"  # 收件人的邮箱地址
#MAIL_FROM="[email protected]"   # 发件人的邮箱地址
#MAIL_SUBJECT="Gin Application Alert"
#MAIL_BODY="Gin application process is not running. Please check the server."
# 应用程序名称(如 gin-app)
APP_NAME="gin-app"
# 发送钉钉通知
send_dingtalk_alert() {
    curl -s -X POST "$DINGTALK_WEBHOOK" \
        -H "Content-Type: application/json" \
        -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"Gin application process is not running. Please check the server.\"}}"
}
# 发送邮件通知
#send_email_alert() {
#    echo "$MAIL_BODY" | mail -s "$MAIL_SUBJECT" "$MAIL_TO" #发送一封简单的邮件
#    # echo "This is the email body" | mail -r "MAIL_FROM" -s "$MAIL_SUBJECT" "$MAIL_TO" #可以使用 -r 选项指定发件人
#}
# 发送警报
send_alert() {
    send_dingtalk_alert
#    send_email_alert
}
# 检查进程状态
check_process() {
    pgrep -f "$APP_NAME" > /dev/null 2>&1
    return $?
}
# 主函数
main() {
  if [ ! -f "$STATUS_FILE" ]; then
      echo "UP" > "$STATUS_FILE"
  fi
  check_process
  CURRENT_STATUS=$?
  LAST_STATUS=$(cat "$STATUS_FILE")
  if [ $CURRENT_STATUS -ne 0 ] && [ "$LAST_STATUS" == "UP" ]; then
      # 进程变为不可用,发送警报并更新状态文件
      send_alert
      echo "DOWN" > "$STATUS_FILE"
  elif [ $CURRENT_STATUS -eq 0 ] && [ "$LAST_STATUS" == "DOWN" ]; then
      # 进程恢复可用,更新状态文件
      echo "UP" > "$STATUS_FILE"
  fi
}
main

# 定时运行脚本

使用 cron 定时任务来定期运行这个脚本。更多命令请阅读博文 Linux 命令大全

  1. 编辑 crontab 文件 命令 crontab -e
  2. 添加以下行来每分钟运行一次脚本 * * * * * /path/to/your/script/SCRIPT_NAME.sh

过去无法挽回,未来可以改变,有的人成日殚精竭虑,却掀不起什么风浪,有的人却因一念之差,让世界天翻地覆,这就是命运权重。

阅读次数

请我喝[茶]~( ̄▽ ̄)~*

NIDLH 微信支付

微信支付

NIDLH 支付宝

支付宝