启动脚本似乎不起作用

时间:2017-05-20 10:22:25

标签: google-compute-engine ubuntu-16.04

我最近开始在我的一些项目中使用Google的Compute引擎,问题是我的启动脚本似乎不起作用,由于某些原因我的脚本无效,VM有启动脚本元数据和当我用以下方式手动运行它时它工作正常:

sudo google_metadata_script_runner --script-type startup

以下是我试图在启动时运行的内容:

#!/bin/bash
sudo apt-get update
sudo rm -f Eve.jar
sudo rm -f GameServerStatus.jar
wget <URL>/Eve.jar
wget <URL>/GameServerStatus.jar
sudo chmod 7777 Eve.jar
sudo chmod 7777 GameServerStatus.jar
screen -dmS Eve sh Eve.sh
screen -dmS PWISS sh GameServerStatus.sh

日志中也没有错误,它似乎停止在chmod或screen命令,任何想法?

谢谢!

4 个答案:

答案 0 :(得分:2)

  1. 转到VM实例页面。
  2. 单击要添加启动脚本的实例。
  3. 点击页面顶部的修改按钮。
  4. 在自定义元数据下,单击添加项目。
  5. 使用以下某个键添加启动脚本:
  6. startup-script:直接使用此密钥提供启动脚本内容。 startup-script-URL:使用此密钥向启动脚本文件提供Google云端存储URL。

    它正在发挥作用。 GCE Start Up Script

    中显示的新实例和现有实例的文档

    启动脚本输出将写入以下日志文​​件:

    1. CentOS和RHEL:/ var / log / messages
    2. Debian:/var/log/daemon.log
    3. Ubuntu 14.04,16.04和16.10:/ var / log / syslog
    4. 在Ubuntu 12.04,SLES 11和12以及所有早于v20160606的图片上:

      sudo /usr/share/google/run-startup-scripts
      

答案 1 :(得分:2)

要添加到kangbu的答案中:

通过

检查容器优化的操作系统中的日志
sudo journalctl -u google-startup-scripts.service

显示该脚本找不到用户。经过长时间的调试,我终于在sudo之前添加了一个延迟,现在它可以工作了。脚本运行时似乎没有注册用户。

#! /bin/bash

sleep 10  # wait...
cut -d: -f1 /etc/passwd > /home/user/users.txt  # make sure the user exists
cd /home/user/project  # cd does not work after sudo, do it before
sudo -u user bash -c '\
source /home/user/.bashrc &&
<your-task> && \
date > /home/user/startup.log'

答案 2 :(得分:1)

我也提到了@Brina的问题。我设置了元数据键startup-script,并将其值设置为:

touch a
ls -al > test.txt

当我在sudo google_metadata_script_runner --script-type startup上方运行脚本时,它运行良好,但是,如果我重置VM实例,启动脚本将无法正常工作。所以,我检查了启动脚本日志

...
Jul  3 04:30:37 kbot-6 ntpd[1514]: Listen normally on 5 eth0 fe80::4001:aff:fe8c:7 UDP 123
Jul  3 04:30:37 kbot-6 ntpd[1514]: peers refreshed
Jul  3 04:30:37 kbot-6 ntpd[1514]: Listening on routing socket on fd #22 for interface updates
Jul  3 04:30:38 kbot-6 startup-script: INFO Starting startup scripts.
Jul  3 04:30:38 kbot-6 startup-script: INFO Found startup-script in metadata.
Jul  3 04:30:38 kbot-6 startup-script: INFO startup-script: Return code 0.
Jul  3 04:30:38 kbot-6 startup-script: INFO Finished running startup scripts.

是的。他们找到了启动脚本并运行了它。我猜它已经作为另一个用户执行了。我这样更改了脚本:

pwd > /tmp/pwd.txt
whoami > /tmp/whoami.txt

结果是:

myuserid@kbot-6:/tmp$ cat pwd.txt whoami.txt
/
root

是的。它以/用户的身份在root部门执行。最后,我将脚本更改为sudo -u myuserid bash -c ...,该脚本由指定的用户ID运行。

答案 3 :(得分:0)

认为您不需要sudo,而chmod 7777应该是777

开头的cd(或至少pwd)也可能有用。

...登录到文本文件,以了解脚本可能在哪里失败。