Question:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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:
1 2 |
/var/lib/cloud/instance/scripts/part-001 |
then it runs fine. Also, it works if I emulate the way cloud-init runs it:
1 2 3 4 |
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?
Answer:
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:
1 2 |
#!/bin/bash -e -v |
to just this:
1 2 |
#!/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. 🙂