GCP 在启动脚本上运行 tmux

问题描述 投票:0回答:1

我正在尝试使用现场虚拟机,目前正在设置我的工作流程。我还没有弄清楚的最后一点是在我的实验中启动 tmux 会话,这样我有时可以 ssh 到现场虚拟机来检查它们的状态,而不会在断开连接后进程终止。

这是我的启动脚本(

user
是虚拟用户名):

#!/bin/bash

sudo -u user bash <<EOF
cd /home/user/

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda3.sh 2> log_miniconda
bash /tmp/miniconda3.sh -b -p /home/user/miniconda3 2> log_minicondash

/home/user/miniconda3/bin/conda init bash
source /home/user/miniconda3/etc/profile.d/conda.sh
source /home/user/.bashrc

conda create -y -n test python=3.8

gsutil cp -r gs://my-bucket/spot_vm /home/user/

tmux start-server && echo "--- Line 1 OK" >>/tmp/debug.txt
tmux new -d -s main 'sleep 1; cd /home/user/spot_vm; eval "$(conda shell.bash hook)"; conda activate test; python spot_test.py' && echo "--- Line 2 OK" >>/tmp/debug.txt
EOF

spot_test.py
应该只是每分钟将时间写入一个文件,只是为了检查虚拟机是否正在运行。但是该文件并未创建。启动脚本的输出是:

Sep 01 16:14:13 test google_metadata_script_runner[834]: startup-script: Operation completed over 48 objects/42.1 KiB.
Sep 01 16:14:13 test sudo[1631]: pam_unix(sudo:session): session closed for user user
Sep 01 16:14:13 test google_metadata_script_runner[834]: startup-script exit status 0
Sep 01 16:14:13 test google_metadata_script_runner[834]: Finished running startup scripts.
Sep 01 16:14:13 test systemd[1]: google-startup-scripts.service: Succeeded.
Sep 01 16:14:13 test systemd[1]: google-startup-scripts.service: Unit process 1955 (tmux: server) remains running after unit stopped.
Sep 01 16:14:13 test systemd[1]: google-startup-scripts.service: Unit process 1956 (bash) remains running after unit stopped.
Sep 01 16:14:13 test systemd[1]: google-startup-scripts.service: Unit process 1958 (sleep) remains running after unit stopped.
Sep 01 16:14:13 test systemd[1]: Finished Google Compute Engine Startup Scripts.
Sep 01 16:14:13 test systemd[1]: google-startup-scripts.service: Consumed 31.619s CPU time.

它说有一个 tmux 单元正在运行,但我用

tmux ls
找不到它。我在 stackoverflow 上发现了几个关于这个问题的问题,但他们似乎都没有解决这个问题。有人可以帮忙吗?

google-cloud-platform startup tmux
1个回答
0
投票

(我想你没有使用自定义的 tmux.conf。)

根据

man tmux

  • 启动服务器

    (别名:开始
    启动 tmux 服务器(如果尚未运行),而不创建任何会话。

    请注意,默认情况下 tmux 服务器将在没有会话的情况下退出,这仅在有会话时才有用 在

    ~/.tmux.conf
    中创建,
    exit-empty
    已关闭,或者另一个命令作为同一命令的一部分运行 顺序。例如:

      $ tmux start \; show -g
    

所以要解决它,改变

tmux start-server && echo ...

tmux start-server \; set -g exit-empty off && echo ...
#                 ~~~~~~~~~~~~~~~~~~~~~~~~
© www.soinside.com 2019 - 2024. All rights reserved.