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

寻求可后台完整运行的SOCAT进程重启Bash脚本解决方案

修复SOCAT批量重启脚本的问题

原脚本问题分析

  1. 无法完全后台运行:原脚本仅将内部部分命令放后台,但脚本本身仍在前台执行;disown仅脱离当前shell,若脚本是前台启动,终端关闭仍可能影响进程。
  2. 执行第一条SOCAT后停止:固定sleep 3s可能不足以让所有socat进程终止,导致端口被占用,第一条socat启动失败后脚本后续命令未执行;另外killall可能误匹配或未彻底终止进程。

改进后的脚本

#!/bin/bash

# 精准终止所有socat进程(仅匹配以socat开头的进程)
pkill -f "^socat"

# 循环等待,直到所有socat进程彻底终止(确保端口释放)
while pgrep -f "^socat" > /dev/null; do
    sleep 0.5
done

# 启动UDP转发:nohup脱离终端,重定向所有输出避免生成日志文件,后台运行
nohup socat UDP4-LISTEN:PORT,fork,su=nobody UDP6:[IPV6]:PORT > /dev/null 2>&1 &

# 启动TCP转发:同上处理
nohup socat TCP4-LISTEN:PORT2,fork,su=nobody TCP6:[IPV6]:PORT2 > /dev/null 2>&1 &

exit 0

关键改进点说明

  • 进程终止更可靠:用pkill -f "^socat"精准匹配socat进程,避免误杀;循环等待进程完全消失,替代固定sleep,确保端口彻底释放。
  • 完全后台运行:nohup配合输出重定向,让socat进程彻底脱离终端;执行脚本时只需加&即可让脚本本身也后台运行:./restart_socat.sh &。
  • 避免中断:确保前序进程完全终止后再启动新进程,解决第一条socat启动失败导致脚本停住的问题。

使用建议

  1. 给脚本添加执行权限:
chmod +x restart_socat.sh
  1. 后台执行脚本:
./restart_socat.sh &
  1. 若需定期清理重启,可添加到crontab(无需重启系统),例如每小时执行一次:
0 * * * * /path/to/restart_socat.sh

内容的提问来源于stack exchange,提问作者Johannes v.R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:15:34