python - 睡眠 5 分钟后停止 ec2 实例 - time.sleep() 没有按预期工作?
问题描述
我在 lambda 中运行以下代码。我想在 5 分钟后停止我的 EC2 实例。为此,我在发出 stop_instance 命令之前使用了 time.sleep 间隔 5 分钟。但是在time.sleep之后代码没有通过,而是从头开始循环lambda脚本?
ec2 = boto3.client('ec2', region_name=region)
resp = ec2.describe_instance_status(InstanceIds=instances)
if(len(resp['InstanceStatuses']) == 0):
ec2.start_instances(InstanceIds=instances)
print("Started instance with Instance_id : ",instances)
else:
instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
if instance_status == 80:
ec2.start_instances(InstanceIds=instances)
print("Started instance with Instance_id : ",instances)
print("Instance staus - 1 **: ",instance_status)
status = 0
counter = 5
while (status != 16 and counter > 0):
resp = ec2.describe_instance_status(InstanceIds=instances)
if len(resp['InstanceStatuses']) != 0:
status = resp['InstanceStatuses'][0]['InstanceState']['Code']
time.sleep(5)
counter=counter-1
print("Instance staus - 3 **: ",status)
print("Wait for 5 minutes please !!!")
i = 0
while (i < 1):
time.sleep(300)
i = i + 1
print("Wait time is over, instance status : ", status)
resp = ec2.describe_instance_status(InstanceIds=instances)
instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
print("Instance staus - 2 **: ",instance_status)
if instance_status == 16:
#check if file exists in the S3 location, and if yes, then stop instances.
ec2.stop_instances(InstanceIds=instances)
print("Stopped instance with Instance_id : ",instances)
这是我在我的 cloudwatch 日志中看到的,并且实例没有停止。以下是我的 cloudwatch 日志:
有人可以帮我完成这项工作,以便在 x 分钟后停止 ec2。谢谢。
解决方案
当你只调用一次时,为什么还要打扰它。只需删除While
更好的方法是设置一个 UserData EC2 脚本:
A) 将 .py 文件保存到机器(关闭 S3)并执行它以在 5 分钟内关闭机器。或者
B) 用户数据中的 bash/PowerShell timer.sleep(300)
。
编辑
您可以简单地将其转换为 Bash/PowerShell 并将其放入 UserData 中吗?
time.sleep(300)
print("Wait time is over, instance status : ", status)
resp = ec2.describe_instance_status(InstanceIds=instances)
instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
print("Instance staus - 2 **: ",instance_status)
if instance_status == 16:
ec2.stop_instances(InstanceIds=instances)
推荐阅读
- javascript - 将使用 Tensorflow 库的 Python 代码实现到 HTML 中?
- django - 如何在 Django Rest ModelViewset 中进行过滤
- javascript - 如何检查和打印不和谐的时间戳反应?
- javascript - 为什么我的视图函数渲染数据但它不会显示在浏览器中?(阿贾克斯/Django)
- android - 如何从网站返回到 android 应用程序?
- reactjs - 如何连接要在 REACT 中的状态中使用的值
- python - 如何在 Pytorch 中使用 torchvision.transforms 对分割任务进行数据增强?
- elasticsearch - Elasticsearch 查询在 logstsah 中失败:期望用冒号分隔字段名称和值
- python - 在 postgreSQL 中定义的模式上的 PonyORM 多对多关系
- python - 使用 QThread 正确显示线程 ID