【问题标题】:Ubuntu ec2 instance fails to run userdata scriptUbuntu ec2 实例无法运行 userdata 脚本
【发布时间】:2017-04-27 13:52:32
【问题描述】:

每当实例或其在 Auto Scaling 组中的映像启动时,我正在尝试执行需要在 Ubuntu 14.04 ec2 实例上运行的脚本-

#!/bin/bash-x
REGION=`curl http://169.254.169.254/latest/dynamic/instance-    identity/document|grep region|awk -F\" '{print $4}'`
sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
cd
wget http://ftp.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
tar -xzvf ruby-2.3.1.tar.gz
cd ruby-2.3.1/
./configure
make
sudo make install
apt-get install apache2 
cd /home/ubuntu  
wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto

但脚本永远不会运行。我去了 cloud-init-output.log 文件,下面是日志详细信息-

Cloud-init v. 0.7.5 running 'modules:final' at Mon, 12 Dec 2016 15:54:20 +0000. Up 36.92 seconds.
2016-12-12 15:54:20,432 - util.py[WARNING]: Failed running     /var/lib/cloud/instance/scripts/part-001 [-]
2016-12-12 15:54:20,436 - cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
2016-12-12 15:54:20,436 - util.py[WARNING]: Running scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python2.7/dist-packages/cloudinit/config/cc_scrip$
Cloud-init v. 0.7.5 finished at Mon, 12 Dec 2016 15:54:20 +0000.     Datasource DataSourceEc2.  Up 37.11 seconds

具体来说,我想要实现的是在实例中安装codedeploy。

【问题讨论】:

  • 检查第一行是否是罪魁祸首:"#!/bin/bash-x"

标签: bash amazon-web-services ubuntu-14.04 aws-code-deploy cloud-init


【解决方案1】:

为了测试这一点,我启动了一个 Amazon Linux EC2 实例,#!/bin/bash-x 在用户数据的顶部。

日志说:

/bin/sh: /var/lib/cloud/instance/scripts/part-001: /bin/bash-x: bad interpreter: No such file or directory

我在没有-x 的情况下重新启动了它,它运行良好。

所以,这绝对是 Amazon Linux 出现问题的原因。 Ubuntu 可能会有所不同。

更新:根据 sqlbot 的建议(如下),我用#!/bin/bash -x(-x 之前的一个空格)再次尝试了它,它工作正常。

【讨论】:

  • 预期值可能是#!/bin/bash -x,-x 之前有一个空格。省略空格肯定也会在 Ubuntu 上破坏它。 FWIW,-x 选项是带有扩展的详细模式——它会导致 bash 在执行前回显每一行,在变量插值之后。
  • 脚本在我的本地机器上完美运行,但是,它在启动期间仍然没有在 AWS ec2 上执行(用户数据)。
  • 用户数据脚本仅在实例首次启动时执行。它不会在后续实例启动时运行。您是否在启动新实例时传递用户数据?
【解决方案2】:

你用的shebang是错的。

将#!/bin/bash-x 更改为#!/bin/bash

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 2018-08-30
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2021-01-16
    相关资源
    最近更新 更多