代码之家  ›  专栏  ›  技术社区  ›  kmh

AWS EMR引导操作作为sudo

  •  1
  • kmh  · 技术社区  · 6 年前

    我需要更新 /etc/hosts

    整个剧本只不过是:

    #!/bin/bash
    echo -e 'ip1 uri1' >> /etc/hosts
    echo -e 'ip2 uri2' >> /etc/hosts
    ...
    

    此脚本需要作为 sudo 否则就失败了。

    https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html#bootstrapUses

    苏多

    好消息。。。但我不知道怎么做,也找不到一个例子。

    • 作为Hadoop运行,并将“sudo”添加到脚本中的每个“echo”语句中
    • 1=1 sudo bash /home/hadoop/myDir/myScript.sh

    我一直得到:

    在主实例(i-xxx)上,引导操作2返回非零返回代码

    如果我检查“setuphadoop调试”步骤的日志,那里什么也没有。

    从这里开始: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-cluster-lifecycle

    摘要emr设置(按顺序):

    1. 条款ec2实例
    2. 运行引导操作
    3. 安装本机应用程序。。。喜欢 hadoop公司 、火花等。

    我想这一定是因为我的脚本不是以sudo的形式运行的,它无法更新 /etc/主机 .

    /etc/主机 ?

    1 回复  |  直到 6 年前
        1
  •  5
  •   jarmod    6 年前

    从shell脚本中使用sudo作为EMR引导操作没有问题,所以它应该可以工作。您可以用一个简单的脚本测试它是否可以工作,该脚本只执行“sudo ls/root”。

    您的脚本正在尝试通过重定向stdout来附加到/etc/hosts:

    sudo echo -e 'ip1 uri1' >> /etc/hosts
    

    这里的问题是,当echo与sudo一起运行时,重定向(gt;)则不是。它由底层hadoop用户运行,该用户没有写入/etc/hosts的权限。解决方法是:

    sudo sh -c 'echo -e "ip1 uri1" >> /etc/hosts'