【发布时间】:2014-02-09 04:41:24
【问题描述】:
我想以编程方式启动 Amazon EC2 实例,使用 cloud-init 执行 Python 脚本,然后让相同的脚本终止该实例。一切正常,除了自我终止部分。我试过这个:
os.system('sudo shutdown now -P')
还有这个:
os.system('sudo -n shutdown now -P')
还有这个:
os.popen('sudo -S shutdown now -P')
不好。在所有情况下,/var/log/cloud-init.log 文件都显示sudo: sorry, you must have a tty to run sudo。
显然在/etc/sudoers 上注释掉Default requiretty 行可以解决问题,但我想以编程方式做事,所以我想这不是一个选项(它可能也需要root 权限,这让我们回过头来平方一)。
我想我可以使用多部分 cloud-init 脚本 - 比如说,在 Python 脚本之后使用 bash 脚本来执行自终止。但肯定有办法在 Python 中解决这个问题?
(亚马逊 Linux。Python 2.7.5。Boto 2.23)
【问题讨论】:
-
我很困惑,您为什么不想注释掉相应的行“/etc/sudoers”并“以编程方式”执行
sudo shutdown命令? -
请原谅我的 nOOb 问题,但是有没有办法以编程方式注释掉
Default requiretty行呢?而且这本身不需要root权限吗? -
抱歉,我的意思是您可以在登录并修改系统文件后以编程方式执行
sudo shutdown命令。为什么需要从同一个脚本修改文件? -
因为我没有实际登录,所以我通过 cloud-init 传递脚本。
标签: python linux amazon-web-services amazon-ec2 cloud-init