我有一个简单的bash脚本只在远程主机(Amazon EC2)上“睡眠3600”,我使用fabric通过fabric.operations.run调用它(我没有设置任何env.timeout或env.command_timeout)
如果远程bash脚本休眠3600秒,则在bash脚本运行完毕后,fabric无法返回。我打印了堆栈跟踪,它一直等待channel.exits_status_ready()
(https://github.com/fabric/fabric/blob/master/fabric/operations.py LINE:794),即使脚本已经返回。
这仅适用于长时间运行的过程。我试图使bash脚本睡眠120秒,它运行正常。
我使用netstat仔细检查了打开的连接,并且由fabric打开的ssh会话仍然存在。
需要帮助:)知道为什么会这样吗?
答案 0 :(得分:3)
想通了,只需要使用env.keepalive = 1