[linux]邮箱通知自己,when sh脚本运行
使用自己的邮箱给自己的邮箱。 当天主播直播了(几点),要通知,上传了文件,要通知,没直播要通知,结束直播要通知,如果遇到问题,例如cookie过期,也要通知,其他问题,也通知
这个需求非常棒,它能把你的服务器变成一个“会说话”的管家。要实现这个功能,我们需要做两件事:
-
在服务器上配置发信环境(这里推荐使用
msmtp,它轻量且稳定)。 -
升级脚本逻辑,在关键节点插入“发信”指令。
第一步:安装并发信授权
在服务器上安装 msmtp:
Bash
apt update && apt install msmtp msmtp-mta -y
接着,你需要获取你邮箱的“授权码”(不是登录密码)。以 QQ 邮箱或网易邮箱为例,在设置里开启 SMTP 即可获得一串 16 位的字母。
创建配置文件:
Bash
cat << 'EOF' > ~/.msmtprc
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
account default
host smtp.qq.com
port 465
from 你的邮箱@qq.com
user 你的邮箱@qq.com
password 你的授权码
tls_starttls off
EOF
保存退出并设置 600 权限(必须设置,否则报错):
Bash
chmod 600 ~/.msmtprc
第二步:升级脚本(加入通知逻辑)
我们要重新写一下 upload_baidu.sh。这个版本会识别“正在录制”、“转换成功”、“上传成功”以及“异常错误”。
执行 cat 命令覆盖原脚本:
Bash
cat << 'EOF' > /root/DouyinLiveRecorder/upload_baidu.sh
#!/bin/bash
# --- 配置区 ---
MY_EMAIL="你的邮箱@qq.com"
DOWNLOAD_DIR="/root/DouyinLiveRecorder/downloads"
LOG_FILE="/root/DouyinLiveRecorder/upload.log"
# --- 发信函数 ---
send_mail() {
local subject="$1"
local body="$2"
echo -e "Subject: ${subject}\n\n${body}" | msmtp "${MY_EMAIL}"
}
# 1. 防重运行锁
if pidof -x $(basename "$0") -o %PPID >/dev/null; then
exit 1
fi
cd "$DOWNLOAD_DIR" || exit 1
echo "--- 任务开始: $(date) ---"
# --- 检查直播状态 & Cookie 是否过期 ---
# 检查 Docker 日志里是否有 Cookie 过期关键字
if docker logs --since 1h douyinliverecorder-app-1 2>&1 | grep -q "Cookie已失效"; then
send_mail "🚨 警告:抖音 Cookie 已过期" "服务器检测到录制器 Cookie 失效,请及时更新 URL_config.ini 或 config.ini 中的 Cookie。"
fi
# --- 逻辑处理 ---
HAS_ACTIVE_LIVE=false
PROCESSED_FILES=""
# 查找所有 .ts 文件
find . -type f -name "*.ts" | while read -r ts_file; do
if lsof "$ts_file" > /dev/null 2>&1; then
# 发现正在写入的文件,说明正在直播
anchor_name=$(basename $(dirname "$ts_file"))
if [ "$HAS_ACTIVE_LIVE" = false ]; then
send_mail "🎙️ 主播正在直播中" "检测到主播 [${anchor_name}] 正在直播,服务器已开始抓取并分段..."
HAS_ACTIVE_LIVE=true
fi
continue
fi
# 逻辑转换
dir_name=$(dirname "$ts_file")
base_name=$(basename "$ts_file" .ts)
convert_dir="$dir_name/converted"
mkdir -p "$convert_dir"
mp3_file="$convert_dir/${base_name}.mp3"
ffmpeg -i "$ts_file" -vn -acodec libmp3lame -q:a 2 "$mp3_file" -y -loglevel error
if [ $? -eq 0 ]; then
rm -f "$ts_file"
PROCESSED_FILES="${PROCESSED_FILES}\n- ${base_name}.mp3"
fi
done
# --- 上传与最终通知 ---
BYPY_PATH=$(which bypy)
SYNC_OUT=$($BYPY_PATH --retry 5 --timeout 120 -s 500M syncup . /live_audio --on-dup overwrite 2>&1)
if [[ $SYNC_OUT == *"OK"* ]]; then
if [ ! -z "$PROCESSED_FILES" ]; then
send_mail "✅ 文件上传成功通知" "以下文件已成功转码并上传至百度网盘:${PROCESSED_FILES}"
fi
elif [[ $SYNC_OUT == *"Error"* ]]; then
send_mail "❌ 上传过程遇到异常" "bypy 同步时出错,请查看日志文件 upload.log。错误摘要:\n${SYNC_OUT}"
fi
# 清理空文件夹
find . -type d -empty -delete 2>/dev/null
echo "--- 任务结束: $(date) ---"
EOF
chmod +x /root/DouyinLiveRecorder/upload_baidu.sh
这样修改后的效果:
-
Cookie 过期:脚本每半小时扫一次 Docker 日志,发现“失效”立刻给你发邮件。
-
正在直播:一旦发现有
.ts文件被占用,邮件通知你“某某主播正在直播,正在抓取”。 -
上传完成:只有当有新的 MP3 成功传到网盘后,才会发一封统计邮件,告诉你“某某文件已到账”。
-
异常保护:如果网盘上传报错(非 31023 那种小错,而是真正的失败),会把错误片段发给你。
下一步操作:
-
请先按照第一步配置好你的
~/.msmtprc并填入邮箱和授权码。 -
测试发信是否成功:
echo "test" | msmtp 你的邮箱@qq.com -
成功收到测试信后,再执行上面的
cat命令。
你要不要先配置一下 .msmtprc 试试能不能收到测试邮件?

浙公网安备 33010602011771号