我正在尝试启动一个EC2(亚马逊Linux),并且没有启动一个长期运行的命令。 它需要在ec2用户帐户下运行。 这是我第一次尝试:
#!/bin/bash echo 'Woot 1!' > /home/ec2-user/woot1.txt pushd /home/ec2-user/my-app-dir nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py & echo 'Woot 2!' > /home/ec2-user/woot2.txt
我试图运行的关键命令是“nohup”行,来运行my_process.py。
shell脚本在shell中以root用户身份运行时会起作用,但是当我将其以user-data的forms提供给ec2-run-instances并login到实例时,我同时看到woot1.txt和woot2.txt,但是my_process.py没有运行。 更重要的是,my_process.py在运行时会创build一个日志文件,但是当我将脚本作为用户数据提供给ec2-run-instances时,那里没有日志文件(也没有nohup.out)。
我已经尝试把相同的东西放在一个云初始化的forms,以及相同的结果:
#cloud-config runcmd: - echo 'Woot 1!' > /home/ec2-user/woot1.txt - pushd /home/ec2-user/my-app-dir - nohup sudo -u ec2-user /home/ec2-user/my-app-dir/my_process.py & - echo 'Woot 2!' > /home/ec2-user/woot2.txt
如果有人能告诉我哪里出错了,我会很感激。
这个过程没有运行的原因是Amazon EC2 Linux实例是Red-Hat,并且在sudo命令需要tty的发行版中存在一个bug /function。 在处理cloud-init时,环境中没有附加的tty,因此失败。
一个答案是编辑etc / sudoers并更改行
Defaults requiretty
至
Defaults !requiretty
还有其他的方法,显然,但这对我来说很有效。
我猜这个命令没有附加shell。
代替
- echo 'Woot 1!' > /home/ec2-user/woot1.txt
尝试
- /bin/sh -c "echo 'Woot 1!' > /home/ec2-user/woot1.txt"