我最近开始在我的一些项目中使用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命令,任何想法?
谢谢!
添加到康布的答案:
检查容器优化操作系统中的日志
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'
startup-script:直接使用此密钥提供启动脚本内容。 startup-script-URL:使用此密钥向启动脚本文件提供Google云端存储URL。
这是工作。 GCE Start Up Script中显示的新实例和现有实例的文档
启动脚本输出将写入以下日志文件:
在Ubuntu 12.04,SLES 11和12以及所有早于v20160606的图像上:
sudo /usr/share/google/run-startup-scripts
我有同样的问题@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运行。
认为你不需要root
,以及sudo -u myuserid bash -c ...
应该是sudo
开头的chmod 7777
(或至少是777
)可能也很有用。
...登录到文本文件,以便知道脚本可能失败的位置。