我正在尝试在GCE启动时在CentOS实例上运行以下脚本。 我在实例名称上设置了自定义元数据“startup-script”,并将以下脚本作为值。
脚本没有在启动,重启或运行/ usr / share / google / run-startup-scripts时执行,但如果我在实例上本地创建并执行
,则会执行我遗失了哪些明显的东西?
#! /bin/bash
# Installs apache and a custom homepage
# 1234567 123456
#Get this servers name from the metadata server and use the header to authenticate
THIS_SERVER_NAME=$(curl http://metadata/computeMetadata/v1/instance/hostname -H "X-Google-Metadata-Request: True")
#Turn off IPtables firewall that comes installed
service iptables stop
#Install apache
yum install -y httpd
#start apache
service httpd start
#create custom default homepage for this server
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World</h1>
<p>This is Server: $THIS_SERVER_NAME</p>
</body></html>
EOF
答案 0 :(得分:0)
我的个人经历面临两个问题:
1)需要交互的命令在启动时无法正常运行。例如,apt-get install会要求您确认进程(是/否)?在这种情况下,您可以关闭互动并传递&#34;是&#34;通过替换
yum install foo
apt-get install foo
与
yum -y --assumeyes install foo
apt-get -y --force-yes install foo
此外,如果您正在使用Debian,则在任何命令之前的以下内容将禁止交互:
sudo DEBIAN_FRONTEND=noninteractive <your command here, e.g., apt-get -y install foo>
2)另一个明显的问题是,有时你必须等待这个过程完成,这可能比你的实例出现的时间要晚得多,并且运行&#34;。
答案 1 :(得分:0)
我使用CentOS 7作为基本映像并安装了一些库,但它不起作用。切换到CentOS 6后,它运行良好(似乎CentOS 7有问题)。
答案 2 :(得分:0)
我很好奇今天的情况(原始帖子发布6年后),所以我用CentOS 6,7&8创建了三个VM,并放置了启动脚本。>
我使用最初问题中的脚本而未做任何修改。
在所有三种情况下创建VM后,httpd
已安装并正在运行。以下是部分serial console输出。
CentOS 6的结果:
Installed:
httpd.x86_64 0:2.2.15-69.el6.centos
...
Complete!
Starting httpd: [ OK ]
exit status 0
CentOS 7的结果:
Installed:
httpd.x86_64 0:2.4.6-93.el7.centos
...
Complete!
centos7 systemd: Starting The Apache HTTP Server...
centos7 systemd: Started The Apache HTTP Server.
GCEMetadataScripts: startup-script exit status 0
CentOS 8的结果:
Installing:
httpd x86_64 2.4.37-21.module_el8.2.0+494+1df74eae
...
systemd[1]: Starting The Apache HTTP Server...
systemd[1]: Started The Apache HTTP Server.
GCEMetadataScripts: startup-script exit status 0
无论是什么原因导致在询问此问题时脚本无法运行,现在情况并非如此。