我最近开始在我的一些项目中使用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命令,任何想法?
谢谢!
答案 0 :(得分:2)
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
答案 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
)也可能有用。
...登录到文本文件,以了解脚本可能在哪里失败。