好的,所以,我在网路上看了一下,看起来好像还有很多其他人都有这个问题,但也可能是我们正在做的事情.
我已经疯狂地把它蒸馏出来,认为是一个有用的测试用例:
配置/ deploy.rb:
## Excerpt task :big_delay,:roles => :web do run "sleep 480" run "echo Meow Meow Meow" end
和stupid_script.sh:
#!/bin/sh ssh foo 'sleep 480; echo Meow Meow Meow'
其中foo是我们部署到的同一服务器的名称.
当我运行这两个,它应该连接到另一个框,不要做任何事情8分钟,然后吐出一些无用的文本和完成.
stupid_script工作,cap任务失败.
我看到远程命令完成与ps xf,但帽似乎没有注意到.
如果睡眠是20而不是240,帽子任务工作正常.
显然,这个任务是无用的,但是我们确实有一些昂贵的东西在部署上运行,触发了这一点,而且我已经排除了ssh上的任何责任.
另一个数据点,如果我们ssh进入框并把代码放在那里,然后从那里运行cap部署,那么它工作正常.
所以…似乎在ssh和capistrano之间有一些奇怪的相互作用.
思考?
解决方法
将ClientAliveInterval和ClientAliveCountMax设置在服务器上的/ etc / ssh / sshd_config中,如choover所示.我在我的部署中与“assets:precompile”完全相同的问题,直到我做出了这样的改变.