【问题标题】:Starting a new tmux session and detaching it, all inside a shell script启动一个新的 tmux 会话并将其分离,所有这些都在一个 shell 脚本中
【发布时间】:2015-10-29 23:04:34
【问题描述】:

我正在尝试创建一个新的 tmux 会话并执行命令“vagrant up”。 'Vagrant up' 需要 3 个多小时,所以我想分离会话,以便稍后返回并通过附加回同一会话来检查该命令的状态。

我按照StackOverflow post 中指定的答案完成了同样的操作。

我收到错误no session found。这是我的代码:

    $cat tmux_sh.sh
    #!/bin/bash
    echo "step 1"
    tmux new-session -d -s rtb123 'vagrant up'
    echo "step 2"
    tmux detach -s rtb123

    $./tmux_sh.sh
    step 1
    step 2
    session not found: rtb123

【问题讨论】:

  • 无法复制。我认为问题是 vagrant up 立即失败,可能是由于位于错误的目录中。你为什么不试试tmux new-session -d -s rtb123 'vagrant up || echo "vagrant failed" && sleep 60'。它会在出错时休眠足够长的时间,以便您调查情况。
  • 您当前未连接到会话 rtb123,因此您无法从中分离。只需删除该行。

标签: bash shell unix vagrant tmux


【解决方案1】:

启动一个 shell,然后将 vagrant 发送给它,这样你就可以看到错误了。

tmux new-session -d -s rbt123
tmux send-keys 'vagrant up' C-m
tmux detach -s rtb123

C-m 表示命中返回。

【讨论】:

  • 您好,我想问一下,为什么要包含第三个分离命令?会话已经分离运行。有必要吗?
  • tmux send-keys -t rbt123 'vagrant up' C-m,如果有多个会话正在运行。
【解决方案2】:

您在创建会话时使用了-d 开关。这意味着会话将开始分离,因此您不需要使用 detach 命令。此外,如果您尝试分离时会话未运行,则意味着它不再存在,因此您的命令可能已退出。

【讨论】:

    【解决方案3】:

    新建、分离、命名并在默认 shell 中执行命令:

    tmux new-session -d -s apiserver 'java -cp /root/apiserver.jar com.package.EntryPoint'

    附加使用:

    tmux attach-session -t apiserver

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多