Google Compute Engine - 使用启动脚本启动 tmux

Google Compute Engine - Start tmux with startup-script

我正在尝试在启动期间使用元数据密钥 "startup-script" 启动 tmux。我试图在启动期间执行 tmux new-session -d -s toto,但是当我在之后执行 tmux ls 时,我没有看到任何 tmux 会话。

我在这里错过了什么?

这里可能缺少一些先决条件:

  1. 该程序应该安装在图像上。标准映像安装了最少的程序集。

  2. 启动脚本 运行 每次启动实例时都会 运行 为 root。因此,如果您直接从启动脚本 运行 tmux,它将启动一个新的 tmux 会话,但作为 root 用户。这不是你最想要的。

话虽如此,这会起作用(我已经使用 gcloud 给出了示例,但您也可以将类似的逻辑应用于 REST API 或云端控制台):

所有这些都可以使用这个启动脚本来解决:

(hash tmux 2>/dev/null || (apt-get update && sudo apt-get -y install tmux)) && sudo -H -u USERNAME tmux new-session -d -s toto

以上命令将安装 tmux(如果尚未安装),然后启动一个名为 toto.

的新分离 tmux 会话

您可以在创建实例时设置此启动脚本:

gcloud compute instances create VM_NAME --metadata 'startup-script=(hash tmux 2>/dev/null || (apt-get update && sudo apt-get -y install tmux)) && sudo -H -u USERNAME tmux new-session -d -s toto' --zone ZONE_NAME --project PROJECT_NAME

或稍后更新现有 VM 的元数据:

gcloud compute instances add-metadata vm-1 --metadata 'startup-script=(hash tmux 2>/dev/null || (apt-get update && sudo apt-get -y install tmux)) && sudo -H -u USERNAME tmux new-session -d -s toto' --zone ZONE_NAME --project PROJECT_NAME

您始终可以 re-run the startup script 在 VM 上(无需重新启动 VM):

$ sudo google_metadata_script_runner --script-type startup

有关 Startup scripts 的完整文档可在此处获得。