公司的运维平台有很大一部分是python写的。
发布系统不可避免的要与远程机器做交互,我们选择了基于paramiko的fabric模块来完成这部分工作。
由于发布过程中存在大量耗时很久的任务,所以选用了celery来执行异步任务。有一部分远程操作是通过celery的任务调用fabric来完成的。
出现大量ssh -W
在某一天,突然接到运维同学的反馈,说生产环境存在大量ssh -W进程,希望可以查一下出现的原因。
通过定位,很快确认了是ssh连接远程时使用了ProxyCommand,导致出现了ssh -W进程,这些进程实际上是ssh连接到远端的代理。
但是奇怪的是,为什么任务执行完后仍然存在大量ssh -W不能正常退出。
后来通过阅读fabric的源代码,在代码里找到了答案。
fabric/state.py
#
# Host connection dict/cache
#
connections = HostConnectionCache()
fabric/network.py
class HostConnectionCache(d