手动正常的rclone对象存储推送脚本,nginx-rtmp自动执行失败
问题排查与解决方案
核心原因分析
手动运行脚本正常,但nginx-rtmp的exec_record_done触发时rclone上传失败,本质是nginx进程的运行环境与用户登录环境不一致,常见场景包括:
- 环境变量缺失:nginx继承的PATH中没有rclone的路径,或找不到rclone配置文件
- 权限不足:nginx运行用户(通常是
www-data或nginx)无权限读取rclone配置、访问目标文件 - 无错误日志:脚本执行时的错误输出未被捕获,无法定位具体问题
具体解决步骤
1. 添加脚本日志输出,定位错误
修改脚本,将所有执行日志写入文件,方便排查具体失败原因:
#!/bin/bash # 定义日志文件路径,确保nginx用户有权写入 LOG_FILE="/scripts/cleaner.log" # 将所有输出重定向到日志 exec >> $LOG_FILE 2>&1 # 打印当前时间与传入参数,确认参数传递正常 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始处理,参数:path=$1, dirname=$2, basename=$3" path=$1 dirname=$2 basename=$3 newfile="${dirname}/${basename}.mp4" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 转码FLV到MP4:$newfile" ffmpeg -y -i "$path" -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264 "$newfile" if [ $? -ne 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] FFmpeg转码失败,退出码:$?" exit 1 fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] 删除原FLV文件:$path" rm "$path" TIME=$(/bin/date +%Y/%m/%d) echo "[$(date '+%Y-%m-%d %H:%M:%S')] 上传到对象存储:$newfile -> objstor:bucket/$TIME/" # 关键:指定rclone配置文件绝对路径,避免环境变量问题 # 同时使用copy替代sync(sync适用于目录同步,单个文件上传用copy更安全) rclone copy -P "$newfile" objstor:bucket/"$TIME"/ --config /scripts/rclone.conf if [ $? -ne 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] Rclone上传失败,退出码:$?" exit 1 fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] 删除本地MP4文件:$newfile" rm "$newfile" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 处理完成"
2. 修复环境与权限问题
- 指定rclone绝对路径:手动执行
which rclone获取路径(如/usr/bin/rclone),将脚本中的rclone替换为绝对路径,避免PATH缺失问题 - 迁移rclone配置文件:将用户目录下的
.config/rclone/rclone.conf复制到/scripts/rclone.conf,并赋予nginx运行用户读取权限:# 假设nginx运行用户是www-data chown www-data:www-data /scripts/rclone.conf chmod 600 /scripts/rclone.conf - 目录权限检查:确保
/scripts、/var/www/html/stream/mp4目录对nginx用户有读写权限:chown -R www-data:www-data /scripts /var/www/html/stream/mp4
3. 验证nginx配置参数
确认exec_record_done的参数传递正确,nginx中$path、$dirname、$basename变量能正确解析为文件路径。可通过日志中的参数打印信息验证。
补充说明
- 建议使用
rclone copy替代sync:sync会使目标目录与源完全一致,若源是单个文件,可能意外删除目标目录中已有文件;copy仅上传指定文件,更适合单个文件上传场景 - 若使用Docker容器,需确保
/scripts目录已挂载到容器内,且rclone配置文件已正确复制到容器中
内容的提问来源于stack exchange,提问作者Merlin Duty
相关产品推荐
相关产品推荐

