十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编这次要给大家分享的是paramiko执行命令超时怎么办,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了绥宁免费建站欢迎大家使用!问题:paramiko远程执行命令,需要等到命令返回信息,如果命令执行时间比较长,返回信息就需要等很久
方案:
1、使用nohup + 待执行命令 + & ,使用后台执行的方式,应该可以快速返回
2、设置paramiko的执行命令等待超时时间
stdin, stdout, stderr = self.client.exec_command(cmd,timeout=10,get_pty=True)
其实上面的两种方案都不可行:方案1,需要优化,下面这种直接调用的方式会导致test.sh启动不起来
stdin, stdout, stderr = self.client.exec_command(‘sh ~/test.sh &',get_pty=True)
方案2,对于需要等待很久的命令,如果timeout小于程序的执行时间,还是会失败,命令执行失败
最终的解决方案来自参考1
把执行很久的sh文件A放入另一个sh文件B中,然后paramiko执行文件B。摘录原文:
paramiko远程执行后台脚本“阻塞”问题
我写的远程命令通道上线之后,发现在远程脚本中后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。
1、复现过程如下:
①、编写测试脚本
脚本1:test.sh
#!/bin/bash sleep 30 echo test end exit 0