项目场景:
动态IP如何使用SRS
问题描述
每天都需要手动更换candidate
解决方案:
利用脚本获取IP自动更换
下面展示一些内联代码片
。
一、修改脚本文件
#!/bin/bash
# SRS 配置文件路径
CONFIG_FILE="PATH/https.rtc.conf" #替换为真实路径
# 获取 uav.extremefei.cn 的 IP 地址
# 使用 dig 或 nslookup 获取域名的 IP 地址
CANDIDATE_IP=$(dig +short 域名) #替换为真实域名
# 如果获取不到 IP,退出并记录错误
if [[ -z "$CANDIDATE_IP" ]]; then
echo "无法获取 uav.extremefei.cn 的 IP 地址,脚本终止。" | tee -a /path/to/log/update_srs_error.log
exit 1
fi
# 打印获取到的 IP
echo "获取到的 IP 地址: $CANDIDATE_IP"
# 使用 sed 替换 https.rtc.conf 中的 candidate 值
# 假设配置文件中的 candidate 是类似这样:candidate 112.232.111.60
# 使用正则表达式替换 candidate 的 IP 地址
sed -i "s|candidate\s*[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}|candidate $CANDIDATE_IP|g" "$CONFIG_FILE"
# 检查 sed 命令是否成功
if [[ $? -ne 0 ]]; then
echo "替换配置文件中的 IP 地址失败。" | tee -a /path/to/log/update_srs_error.log
exit 1
fi
# 重启 SRS 服务,使新的配置生效
# 假设你使用 systemctl 管理 SRS 服务,如果不是,请根据你的服务管理方式修改此命令
systemctl restart srs-enable.service #更改为你自己的自启动文件
# 或者,如果你的 SRS 是通过脚本管理的,可以用以下命令(具体路径和脚本请修改)
# /path/to/srs/stop.sh && /path/to/srs/start.sh
# 打印成功信息
echo "SRS 配置文件已更新,SRS 服务已重启。" | tee -a /path/to/log/update_srs_success.log
二、启动文件测试
我的文件名称:update_candidate.sh
赋予文件权限: chmod +x /home/tagw/update_candidate.sh
启动命令: bash /home/tagw/update_srs_candidate.sh
注意:有可能出现以下错误
/home/tagw/update_candidate.sh: line 2: $'\r': command not found
/home/tagw/update_candidate.sh: line 5: $'\r': command not found
/home/tagw/update_candidate.sh: line 9: $'\r': command not found
原因:脚本文件在 Windows 系统中编辑并保存时,末尾会有 \r(回车符)字符,导致 Linux 系统在执行脚本时出现问题。在 Linux 系统中,行结束符应该是 \n,而不是 \r\n
解决办法
1. 下载dos2unix工具:sudo apt-get install dos2unix
2. 执行: dos2unix /path/update_candidate.sh
3. 再次运行脚本
三、添加脚本定时器
//编辑 root 用户的 crontab 配置文件
1.sudo crontab -e
//最底部添加定时每天5点执行
2.0 5 * * * /home/update_candidate.sh >> /home/log/update_srs.log 2>&1
//查看cron 任务已被添加
3.sudo crontab -l