出于测试目的,我使用普通的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 -n
ssh(终端问题),所以我不得不下载并编译dtach源代码.在这之后,我能够使用Fabric运行我的命令:
[user @ host]运行:dtach -n/tmp/Y sleep 100 >>/tmp/xxx 2>&1
这在所有主机中都能正常工作.但这不符合我的情况,因为:
dtach创建了两个进程:一个用于dtach本身,另一个用于正在运行的进程.
我无法得到正在启动的流程的pid
Yuval Adam.. 25
你可能碰到臭名昭着的面料问题#395.这些问题的简单解决方法是运行您的任务pty=False
.
你可能碰到臭名昭着的面料问题#395.这些问题的简单解决方法是运行您的任务pty=False
.