我正在尝试使用现场虚拟机,目前正在设置我的工作流程。我还没有弄清楚的最后一点是在我的实验中启动 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 上发现了几个关于这个问题的问题,但他们似乎都没有解决这个问题。有人可以帮忙吗?
(我想你没有使用自定义的 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 ...
# ~~~~~~~~~~~~~~~~~~~~~~~~