运行启动脚本时出错:在 GCP 上运行的 Redhat 实例中未设置主环境变量

运行启动脚本时出错:在 GCP 上运行的 Redhat 实例中未设置主环境变量

我不太明白用于运行启动脚本的 shell 环境。它与登录会话有何区别?

如果我设置一个简单的启动脚本来打印环境变量:

metadata
items: - key: startup-script value: ' printenv;'

我会有这样的东西: Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: OLDPWD=/ Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: PATH=/usr/local/sbin:/usr/local/bin:/usr/ Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: PWD=/opt Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: LANG=en_US.UTF-8 Feb 20 15:16:19 xxxx startup-script[1112]: INFO startup-script: SHLVL=2 Feb 20 15:16:19 gceeuw1lin0003 startup-script[1112]: INFO startup-script: _=/usr/bin/printenv

如果我在 ssh 会话中执行 printenv 命令,我可以看到更多变量,如 HOSTNAME、HOME、SHELL……等等。

我尝试在启动时安装一个软件(专有软件),但由于 $HOME 变量而失败。

Could not expand the path using $HOME

我尝试在软件安装之前在启动脚本中设置 HOME 变量,但是失败了,提示:

invalid command name "wm"

当我尝试使用交互式 shell 进行相同的安装时,一切都运行正常!甚至更好的是,即使我使用以下命令从交互式会话强制重新运行启动脚本,它也能正常工作:

sudo google_metadata_script_runner --script-type startup --debug

我正在寻找对所发生事情的合理解释?为什么它是从交互式 shell 而不是从启动脚本运行的?

知道如何修复这个问题吗?

先感谢您!

答案1

您是否尝试过在自动化选项卡上运行启动脚本?我发现通常不用于此目的,请检查启动脚本 GCE文档以确保您使用的是正确的脚本,如下所示:

#! /bin/bash
printenv

相关内容