user data scripts fails without giving reason

匿名 (未验证) 提交于 2019-12-03 00:59:01

问题:

I am starting a Amazon Linux instance (ami-fb8e9292) using the web console, pasting data into the user data box to run a script upon startup. If I use the example given by amazon to start a web server, it works. But when I run my own script (also a #!/bin/bash script), it does not get run.

If I look in var/log/cloud-init.log, it gives no useful information on the topic:

May 22 21:06:12 cloud-init[1286]: util.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/part-001'] with allowed return codes [0] (shell=True, capture=False) May 22 21:06:16 cloud-init[1286]: util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/part-001 [2] May 22 21:06:16 cloud-init[1286]: util.py[DEBUG]: Failed running /var/lib/cloud/instance/scripts/part-001 [2] Traceback (most recent call last):   File "/usr/lib/python2.6/site-packages/cloudinit/util.py", line 637, in runparts     subp([exe_path], capture=False, shell=True)   File "/usr/lib/python2.6/site-packages/cloudinit/util.py", line 1528, in subp     cmd=args) ProcessExecutionError: Unexpected error while running command. Command: ['/var/lib/cloud/instance/scripts/part-001'] Exit code: 2 Reason: - Stdout: '' Stderr: '' 

If I ssh into the instance and sudo su and execute the shell script directly:

/var/lib/cloud/instance/scripts/part-001 

then it runs fine. Also, it works if I emulate the way cloud-init runs it:

python >>> import cloudinit.util >>> cloudinit.util.runparts("/var/lib/cloud/instance/scripts/") 

Using either of those methods, if I intentionally introduce errors into the script then it produces error messages. How can I debug the selective absence of useful debugging output?

回答1:

I had a similar issue and I was able to get around it. I realized that the environment variables EC2_HOME would not be setup for the sudo. I was doing a bunch of stuff in my configset which uses aws cli and for these to work, the EC2_HOME needs to be setup. So, I went in and removed sudo everywhere in my configset and UserData. Earlier when I was hitting the issue, my UserData looked like:

"UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [                                 "#!/bin/bash\n",                                 "sudo yum update -y aws-cfn-bootstrap\n",                                  "# Install the files and packages and run the commands from the metadata\n",                                 "sudo /opt/aws/bin/cfn-init -v --access-key ", { "Ref" : "IAMUserAccessKey" }, " --secret-key ", { "Ref" : "SecretAccessKey" },                                   "         --stack ", { "Ref" : "AWS::StackName" },                                 "         --resource NAT2 ",                                 "         --configsets config ",                                 "         --region ", { "Ref" : "AWS::Region" }, "\n"                         ]]}} 

My UserData after the changes looked like:

"UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [                                 "#!/bin/bash -xe\n",                                 "yum update -y aws-cfn-bootstrap\n",                                  "# Install the files and packages and run the commands from the metadata\n",                                 "/opt/aws/bin/cfn-init -v --access-key ", { "Ref" : "IAMUserAccessKey" }, " --secret-key ", { "Ref" : "SecretAccessKey" },                                   "         --stack ", { "Ref" : "AWS::StackName" },                                 "         --resource NAT2 ",                                 "         --configsets config ",                                 "         --region ", { "Ref" : "AWS::Region" }, "\n"                         ]]}} 

Similarly, I removed all the sudo calls I was doing in my configsets



回答2:

I'm not sure if this is going to be the case for everyone, but I was having this issue and was able to fix it by changing my first line from this:

#!/bin/bash -e -v 

to just this:

#!/bin/bash 

Of course, now my script is failing and I have no idea how far it's getting, but at least I got past it not running it at. :)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!