Ubuntu环境下音频流自动断连并重连的Shell脚本优化需求
Ubuntu环境下音频流自动断连并重连的Shell脚本优化需求
看起来你现在的脚本已经能批量启动50个音频流连接,但缺少「定时断开+自动重连」的核心逻辑对吧?我来帮你调整脚本,完美实现你想要的效果:
优化后的脚本代码
#!/bin/bash # 清理残留进程:先杀掉旧的wget和screen进程,避免干扰新实例 pkill wget pkill screen # 可自定义的参数: RUN_DURATION=300 # 每个连接持续运行的时长(秒),比如300=5分钟 RECONNECT_WAIT=3 # 断连后等待重连的时间(秒) counter=1 while [ $counter -le 50 ] do # 在每个screen会话里启动一个无限循环,实现定时断开+重连 screen -S Radio_Bot_$counter -d -m bash -c " while true; do # 用timeout命令限制wget的运行时长,到点自动终止 timeout $RUN_DURATION wget -4 -q -c --retry-connrefused --tries=0 --waitretry=30 --timeout=5 --no-check-certificate -O /dev/null -U 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0' https://audiostream.com/mp3 # 等待指定时间后重新发起连接 sleep $RECONNECT_WAIT done " counter=$((counter + 1)) done echo All Radio_Bot instances started with auto-reconnect!
关键逻辑说明
- 清理残留进程:新增了
pkill screen,避免之前启动的旧screen会话还在后台运行,导致资源浪费或者冲突 - 可配置参数:把运行时长和重连等待时间做成变量,你想调整的话直接改
RUN_DURATION和RECONNECT_WAIT的值就行,不用去翻代码里的命令 - 定时断开+循环重连:每个screen会话里套了一个
while true无限循环:- 用
timeout命令让wget只运行你设定的时长,时间到了就自动终止这个wget进程 - 等待设定的3秒后,再次启动新的wget连接,实现自动重连
- 用
- 兼容意外断连:如果wget在运行时长内因为网络问题意外断开,它本身的
--retry-connrefused参数会先尝试重试;如果重试失败退出,脚本会自动进入等待,然后重新发起新连接
小提示
- 想查看某个连接的运行状态,可以用命令
screen -r Radio_Bot_1(把1换成对应的编号),退出screen会话按Ctrl+A再按D就行,不会终止后台进程 - 如果需要调整连接数量,修改
while [ $counter -le 50 ]里的50即可
备注:内容来源于stack exchange,提问作者Steven Burghardt
相关产品推荐
相关产品推荐

