启动脚本似乎不起作用

问题描述 投票:4回答:4

我最近开始在我的一些项目中使用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命令,任何想法?

谢谢!

google-compute-engine ubuntu-16.04
4个回答
4
投票

添加到康布的答案:

检查容器优化操作系统中的日志

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. 转到VM实例页面。
  2. 单击要添加启动脚本的实例。
  3. 单击页面顶部的“编辑”按钮。
  4. 在自定义元数据下,单击添加项。
  5. 使用以下某个键添加启动脚本:

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

在Ubuntu 12.04,SLES 11和12以及所有早于v20160606的图像上:

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

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

是。它作为qazxsw poi用户在qazxsw poi目录中执行。最后,我将脚本更改为/,它由指定的userid运行。


0
投票

认为你不需要root,以及sudo -u myuserid bash -c ...应该是sudo

开头的chmod 7777(或至少是777)可能也很有用。

...登录到文本文件,以便知道脚本可能失败的位置。

© www.soinside.com 2019 - 2024. All rights reserved.