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

Linux中用Screen内While True循环监控另一个Screen进程失败求助

问题分析与修复方案

核心问题

你的命令存在两个关键问题,导致myservermonitor会话异常终止或无法正常工作:

  1. grep匹配范围过宽:screen -list会列出所有screen会话,包括你创建的myservermonitor,grep "myserver"会误匹配到这个监控会话,导致逻辑判断错误,永远不会启动myserver;如果启动逻辑未触发但脚本存在其他错误(比如无意义的"$@"参数或文件路径错误),会直接导致bash脚本退出,会话终止。
  2. 冗余的"$@"参数:bash -c执行时你没有传递任何额外参数,"$@"展开为空,不仅对启动命令无帮助,还可能引发潜在的参数解析问题。

修复后的命令

screen -dmS myservermonitor bash -c \
  'while true; do
     # 精确匹配myserver会话,避免误识别myservermonitor
     if ! screen -list | grep -q "\.myserver$"; then
       # 后台启动myserver会话,无需交互
       screen -dmS myserver java \
              @user_jvm_args.txt \
              @libraries/net/minecraftforge/forge/1.18.2-40.2.10/unix_args.txt
     fi
     sleep 15
   done'

关键改进点

  • 精确匹配会话:screen会话的格式为PID.会话名,用grep -q "\.myserver$"只匹配后缀为.myserver的会话,彻底避免误判myservermonitor。
  • 后台启动目标会话:给启动myserver的命令添加-dm参数,让它在后台创建会话,无需交互环境,避免启动失败。
  • 移除冗余参数:直接删除无意义的"$@",简化命令逻辑。

验证步骤

  1. 执行修复后的命令创建监控会话
  2. 检查监控会话是否正常运行:
    screen -list | grep myservermonitor
    
  3. 手动终止myserver会话,等待15秒后检查是否自动重启:
    screen -S myserver -X quit
    sleep 16
    screen -list | grep myserver
    

内容的提问来源于stack exchange,提问作者tjordan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:45:19