Google云计算启动脚本被忽略,没有记录

时间:2017-08-07 14:37:07

标签: google-cloud-platform google-compute-engine

我在谷歌云计算(GCE)上有一个标准的Debian 8.9实例,我的启动脚本会被忽略。

在自定义元数据字段中,对于startup-script,我尝试运行Rscript(用于R文件的批量执行),然后是系统关闭,具有以下内容:

#! /bin/bash
sudo /usr/bin/Rscript /home/myuser/launch_script.R
sudo shutdown -h now

启动实例后会立即关闭,并忽略Rscript。删除最后一行以关闭会导致GCE实例启动,但要忽略Rscript。从终端运行“sudo / usr / bin / Rscript /home/myuser/launch_script.R”会导致脚本运行。它有一个755的chmod,所以我不认为这是一个权限问题。

除了这个问题,我在其他地方读到了日志应该在/ var / log /中发生,但是那里什么都没有。相反,我在我的实例的根目录中有一堆日志文件(只包含启动脚本,没有其他内容):

Screenshot of filesystem root

1 个答案:

答案 0 :(得分:1)

我与谷歌云支持联系,后者给出了以下回复:

  • 脚本定义保存在/var/run/google.startup.script
  • 如果脚本最初没有运行,您可以手动强制执行:$ sudo google_metadata_script_runner --script-type startup#for Debian,或#sudo / usr / share / google / run-startup-scripts#on Ubuntu and旧图片

我在此处发布此信息,因为它不在他们的文档中(截至2017年8月)。我不确定它有多大帮助,因为google.startup.script在我的情况下并不存在(使用GCE上最新的Debian图像),但我确实运行了其他命令。

但是,我认为我的主要问题是:

  1. 我使用autossh连接到远程数据库。启动脚本在autossh之前运行。在脚本中建立40秒的延迟并以用户身份运行脚本(不是sudo-type root)似乎现在已经解决了这个问题。 Autossh作为主要用户运行,我认为在加载较低权限的用户定义脚本之前会加载它。

  2. 我正在使用来自用户帐户的一些gcloud命令,这些命令有自己的身份验证问题。以用户身份运行gcloud auth登录并确保对我的私钥的正确权限解决了这个问题。

  3. 始终记得检查/ var / log中的消息和syslog文件以进行故障排除。这让我可以看到系统启动时加载的内容的顺序。