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

如何实现Jenkins SSH Slave断开后iOS归档任务仍持续执行?

解决SSH断开后iOS归档任务继续执行的问题

我之前也碰到过一模一样的情况——SSH连着Mac Slave跑半小时的iOS归档,结果中途连接断了,任务直接失败,心态都崩了!下面几个方法亲测有效,帮你彻底解决这个痛点:

方法一:用nohup直接让进程脱离终端(最简单)

nohup的核心作用就是让进程忽略终端挂起的信号,就算SSH断开,进程也会继续在后台执行。

具体操作步骤:

  • 直接在SSH里用这个格式运行你的归档命令:
    nohup xcodebuild archive -workspace YourApp.xcworkspace -scheme YourScheme -archivePath ./YourApp.xcarchive > archive.log 2>&1 &
    
    拆解一下参数:
    • > archive.log 把命令的标准输出写入archive.log文件,方便后续查看进度
    • 2>&1 把错误输出也重定向到同一个日志文件,排查问题更方便
    • 最后的& 把进程放到后台运行,不占用当前终端
  • 运行后可以用ps aux | grep xcodebuild确认进程是否正常运行
  • 就算SSH断开,任务也会继续执行,完成后你重新SSH上去看日志或归档文件就行

方法二:用screen或tmux创建持久会话(最灵活,推荐)

nohup虽然简单,但如果之后想实时查看任务输出就不太方便。screen和tmux可以创建一个持久的终端会话,你随时可以断开、重新连接,就像从来没离开过终端一样。

用screen的步骤:

  1. 如果Mac Slave上没装screen,先安装:
    brew install screen
    
  2. 创建一个命名会话(方便之后识别):
    screen -S archive_task
    
  3. 进入新终端窗口后,直接运行你的iOS归档命令
  4. 需要断开SSH时,按Ctrl + A再按D,就能脱离这个会话,此时SSH断开不影响任务执行
  5. 重新SSH连接后,用下面的命令回到之前的会话:
    screen -r archive_task
    
  6. 忘了会话名的话,用screen -ls可以查看所有正在运行的screen会话

用tmux的步骤(功能更强大,长期用推荐):

  1. 安装tmux:
    brew install tmux
    
  2. 创建命名会话:
    tmux new -s archive_task
    
  3. 在会话里运行归档命令,之后按Ctrl + B再按D脱离会话
  4. 重新连接会话:
    tmux attach -t archive_task
    
  5. 查看所有会话:
    tmux ls
    

方法三:用disown补救已启动的任务(临时救急)

如果你已经在SSH里启动了归档任务,才想起没做后台处理,别慌,用disown可以补救:

  1. 按Ctrl + Z暂停当前运行的任务
  2. 输入bg把暂停的任务放到后台继续运行
  3. 输入jobs查看后台任务的编号(比如显示[1]+ Running...,编号就是1)
  4. 输入disown -h %1(把%1换成你的任务编号),这样SSH断开后,这个进程就不会被终止了

额外小技巧:减少SSH连接断开的概率

除了让任务脱离终端,你还可以优化SSH配置,降低连接断开的几率:
在本地的~/.ssh/config文件里添加以下内容(没有这个文件就创建一个):

Host your-mac-slave-hostname
  ServerAliveInterval 60
  ServerAliveCountMax 3

解释:

  • ServerAliveInterval 60:每60秒向服务器发送一次心跳信号
  • ServerAliveCountMax 3:如果连续3次心跳没得到响应,才断开连接

这样能大大减少SSH自动断开的情况,但还是建议结合前面的后台任务方法,双重保险更靠谱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:49