You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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!

关键逻辑说明

  1. 清理残留进程:新增了pkill screen,避免之前启动的旧screen会话还在后台运行,导致资源浪费或者冲突
  2. 可配置参数:把运行时长和重连等待时间做成变量,你想调整的话直接改RUN_DURATION和RECONNECT_WAIT的值就行,不用去翻代码里的命令
  3. 定时断开+循环重连:每个screen会话里套了一个while true无限循环:
    • 用timeout命令让wget只运行你设定的时长,时间到了就自动终止这个wget进程
    • 等待设定的3秒后,再次启动新的wget连接,实现自动重连
  4. 兼容意外断连:如果wget在运行时长内因为网络问题意外断开,它本身的--retry-connrefused参数会先尝试重试;如果重试失败退出,脚本会自动进入等待,然后重新发起新连接

小提示

  • 想查看某个连接的运行状态,可以用命令screen -r Radio_Bot_1(把1换成对应的编号),退出screen会话按Ctrl+A再按D就行,不会终止后台进程
  • 如果需要调整连接数量,修改while [ $counter -le 50 ]里的50即可

备注:内容来源于stack exchange,提问作者Steven Burghardt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:14:09