我正在使用 send_command() 函数在大约 100 个 ec2 实例上长时间(天)运行本地 python 脚本。
ssm_client = boto3.client('ssm', region_name = 'eu-west-1')
commands_to_execute = """cd /home/ubuntu
set -x
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>logv5.out 2>&1
python3 myscript.py"""
command_lines_to_execute = commands_to_execute.split('\n')
ssm_client.send_command(InstanceIds=[instance_id], DocumentName="AWS-RunShellScript", Parameters={'commands': commands_to_execute})
我还通过以下部分记录控制台输出:
set -x
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>logv5.out 2>&1
记录部分按预期工作。
然而,大约一个小时后,每个 EC2 实例中的 Python 进程就死掉了,没有任何输出。 我想也许某种虚拟 bash 会话终止,导致它启动的 python 进程终止。因此,我尝试在执行其他命令之前先启动屏幕,但这也没有帮助。 我在这里缺少什么?为什么我的 Python 进程没有任何输出就死掉了?
这是由于SSM文档上默认的命令执行超时导致的:
命令在被视为失败之前完成的时间(以秒为单位)。默认值为 3600(1 小时)。最大值为 172800(48 小时)。
发送
executionTimeout
以及您的参数。示例此处。