我正在使用Web控制台启动Amazon Linux实例(ami-fb8e9292),将数据粘贴到用户数据框中以在启动时运行脚本。如果我使用亚马逊给出的示例来启动Web服务器,则它可以工作。但是,当我运行自己的脚本(也是#!/bin/bash脚本)时,它不会运行。
如果我查看var/log/cloud-init.log,它不会提供有关该主题的有用信息:
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: ''
Run Code Online (Sandbox Code Playgroud)
如果我使用ssh进入实例并sudo su直接执行shell脚本:
/var/lib/cloud/instance/scripts/part-001
Run Code Online (Sandbox Code Playgroud)
然后运行正常。另外,如果我模拟cloud-init运行它的方式,它也可以工作:
python
>>> import cloudinit.util
>>> cloudinit.util.runparts("/var/lib/cloud/instance/scripts/")
Run Code Online (Sandbox Code Playgroud)
使用任何一种方法,如果我有意将错误引入脚本,则会产生错误消息。如何调试有选择地缺少有用的调试输出的情况?
Rtm*_*tmY 13
不要/var/log/cloud-init.log考虑在内部搜索“失败”、“错误”、“警告”或“/var/lib/cloud/instance/scripts/”等关键字/var/log/cloud-init-output.log- 在大多数情况下,这些关键字包含非常清晰的错误消息。
例如 - 运行错误的命令将在以下位置产生以下错误/var/log/cloud-init-output.log:
/var/lib/cloud/instance/scripts/part-001: line 10: vncpasswd: command not found
cp: cannot stat '/lib/systemd/system/vncserver@.service': No such file or directory
sed: can't read /etc/systemd/system/vncserver@.service: No such file or directory
Failed to execute operation: No such file or directory
Failed to start vncserver@:1.service: Unit not found.
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-epel
Run Code Online (Sandbox Code Playgroud)
最后/var/log/cloud-init.log您将收到一条安静的一般错误消息:
Aug 31 15:14:00 cloud-init[3532]: util.py[DEBUG]: Failed running /var/lib/cloud/instance/scripts/part-001 [1]
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 910, in runparts
subp(prefix + [exe_path], capture=False, shell=True)
File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 2105, in subp
cmd=args)
ProcessExecutionError: Unexpected error while running command.
Command: ['/var/lib/cloud/instance/scripts/part-001']
Exit code: 1
Reason: -
Stdout: -
Stderr: -
cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
Run Code Online (Sandbox Code Playgroud)
(*) 尝试grep只显示相关错误消息:
grep -C 10 '<search-keyword>' cloud-init-output.log
Run Code Online (Sandbox Code Playgroud)
我不确定每个人是否都会遇到这种情况,但是我遇到了这个问题并且能够通过更改我的第一行来解决它:
#!/bin/bash -e -v
Run Code Online (Sandbox Code Playgroud)
就这样:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
当然,现在我的脚本失败了,我不知道它走了多远,但至少我通过了它而不是运行它。:)
希望它能减少某人的调试时间。我的 中没有任何明确的错误消息/var/log/cloud-init-output.log,只是这样:
2021-04-07 10:36:57,748 - cc_scripts_user.py[警告]:无法运行模块脚本用户(/var/lib/cloud/instance/scripts 中的脚本) 2021-04-07 10:36:57,748 - util.py[警告]:运行模块脚本用户(<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_scripts_user.py'>)失败
经过一番调查,我意识到原因是 shebang 字符串中的拼写错误:#!?bin/bash而不是#!/bin/bash.
| 归档时间: |
|
| 查看次数: |
10024 次 |
| 最近记录: |