当前位置:  开发笔记 > 编程语言 > 正文

使用Fabric在后台输入命令在某些主机上不起作用

如何解决《使用Fabric在后台输入命令在某些主机上不起作用》经验,为你挑选了1个好方法。

出于测试目的,我使用普通的ssh命令行工具运行以下命令:

ssh user@host "nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &"

这在我的所有主机中都按预期工作:在后台创建一个睡眠过程,并且ssh立即完成.

我正在尝试使用Fabric在python中实现此功能.我最后run打电话了.这是Fabric日志记录报告的内容:

[user@host] run: nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &

这正是我所期待的.但是,如果我检查在我的主机中运行的进程,sleep 100则不是其中之一.更糟糕的是:问题只发生在我的一些主机上.

我还添加了一些信息,通过添加"\necho $!"来显示已创建的进程.要由Fabric运行的命令.这是报道的内容:

[user@host] run: nohup sleep 100 >> /tmp/xxx 2>&1 < /dev/null &
echo $!
[user@host] out: 30935

我没有关于如何调试它的想法,因为Fabric报告已经创建了该进程,但我发现没有进程在另一端运行.syslog报告正在打开和关闭ssh会话:

Dec  6 09:12:09 host sshd[2835]: Accepted publickey for user from 67.133.172.14 port 37732 ssh2
Dec  6 09:12:09 host sshd[2838]: pam_unix(sshd:session): session opened for user user by (uid=0)
Dec  6 09:12:10 host sshd[2838]: pam_unix(sshd:session): session closed for user user

我可以以某种方式增加ssh守护程序生成的日志记录量,这样我至少可以看到通过ssh请求的命令吗?

我知道Fabric在后台运行命令时遇到了一些问题,但这似乎不是我的问题.Fabric/ssh /后台进程可能还有其他问题吗?

编辑

我已经安装dtach在我的所有系统上.在Ubuntu 8.04中打包的版本太旧了,不允许调用dtach -nssh(终端问题),所以我不得不下载并编译dtach源代码.在这之后,我能够使用Fabric运行我的命令:

[user @ host]运行:dtach -n/tmp/Y sleep 100 >>/tmp/xxx 2>&1

这在所有主机中都能正常工作.但这不符合我的情况,因为:

dtach创建了两个进程:一个用于dtach本身,另一个用于正在运行的进程.

我无法得到正在启动的流程的pid

Yuval Adam.. 25

你可能碰到臭名昭着的面料问题#395.这些问题的简单解决方法是运行您的任务pty=False.



1> Yuval Adam..:

你可能碰到臭名昭着的面料问题#395.这些问题的简单解决方法是运行您的任务pty=False.


你可以跟进这个问题,这看起来像一个ssh bug,而不是一个结构bug.你也可以提出一个有用的答案;)
我遇到了同样的问题,只要在运行命令之前没有'with cd('SomeDir')',这个解决方案就会有所帮助.虽然可以通过前置目录简单地修复,但仍然想知道为什么.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有