#!/bin/bash
# cron 环境变量比较少,主动设置 PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# =========================
# 基础配置
# =========================
# 统计昨天
DATE=$(date -d "yesterday" "+%Y-%m-%d")
# PM2 日志
PM2_ERROR_LOG="/data/www/flextv/logs/flextv-error.log"
# Nginx 日志
NGINX_ERROR_LOG="/var/log/nginx/error.log"
NGINX_ACCESS_LOG="/var/log/nginx/access.log"
# 飞书机器人 Webhook
FEISHU_WEBHOOK="https://open.feishu.cn/open-apis/bot/v2/hook/你的Webhook"
# =========================
# PM2 日志统计
# =========================
PM2_ERROR_COUNT=$(grep -c "$DATE" "$PM2_ERROR_LOG" 2>/dev/null || true)
PM2_ERROR_DETAIL=$(grep "$DATE" "$PM2_ERROR_LOG" 2>/dev/null | tail -n 10)
if [ -z "$PM2_ERROR_DETAIL" ]; then
PM2_ERROR_DETAIL="无"
fi
# =========================
# Nginx Error 日志统计
# =========================
NGINX_ERROR_COUNT=$(grep -c "$DATE" "$NGINX_ERROR_LOG" 2>/dev/null || true)
NGINX_ERROR_DETAIL=$(grep "$DATE" "$NGINX_ERROR_LOG" 2>/dev/null | tail -n 10)
if [ -z "$NGINX_ERROR_DETAIL" ]; then
NGINX_ERROR_DETAIL="无"
fi
# =========================
# Nginx HTTP 状态码统计
# =========================
# 根据 access.log 格式统计昨天的 502 / 504
NGINX_502_COUNT=$(grep "$DATE" "$NGINX_ACCESS_LOG" 2>/dev/null | grep -c ' 502 ' || true)
NGINX_504_COUNT=$(grep "$DATE" "$NGINX_ACCESS_LOG" 2>/dev/null | grep -c ' 504 ' || true)
# =========================
# 飞书消息
# =========================
MESSAGE="【服务器日志日报】
日期:$DATE
PM2
- ERROR:$PM2_ERROR_COUNT
Nginx
- ERROR:$NGINX_ERROR_COUNT
- 502:$NGINX_502_COUNT
- 504:$NGINX_504_COUNT
PM2 最近错误:
$PM2_ERROR_DETAIL
Nginx 最近错误:
$NGINX_ERROR_DETAIL"
# =========================
# 推送飞书
# =========================
curl -s -X POST "$FEISHU_WEBHOOK" \
-H "Content-Type: application/json" \
-d "$(cat <<EOF
{
"msg_type": "text",
"content": {
"text": $(printf '%s' "$MESSAGE" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))')
}
}
EOF
)"
# =========================
# 记录脚本执行日志
# =========================
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 日志日报推送完成"