如何在远程服务器上启动进程、断开连接,然后稍后收集输出?
我正在用Python写自动化代码,目的是测试一个网络应用的行为。因此,我的代码需要能够在网络中的服务器上启动一个进程或脚本(比如tcpdump或者一个Python脚本),然后断开连接,运行其他进程,最后再回来关闭或评估之前启动的进程。我的网络里有Windows和Linux的机器,所有机器上都运行着sshd和Python(Windows机器是通过Cygwin来运行的)。
我考虑过几个方案,主要是: - 启动一个进程,然后通过在后面加一个&符号把它放到后台 - 以某种方式使用screen工具 - 使用Python的线程
还有什么其他的方案我应该考虑吗?根据你的经验,完成这样的任务最好的方法是什么?
8 个回答
如果你想要一个快速又轻便的解决方案,screen 是个不错的选择。如果你想要完全自动化,设置一个后台运行的进程并使用 syslog
记录到系统日志是个好主意。你的系统可能有一个 start-stop-daemon
脚本,对于C语言的代码,它可能还会在C库中有一个 daemon(3)
的调用。
首先,nohup是一个命令(至少在类Unix系统上是这样),它可以让你在关闭终端后,程序仍然继续运行。你还需要把程序的输出结果重定向到一个日志文件,这样你就可以稍后回来查看和监控这些输出了。
现在我明白你真正想要的是什么了,我觉得最好的办法是创建一个轻量级的守护进程,来运行你想要的任何程序。这个守护进程可以把输出结果保存到一个日志文件里,这样即使运行的时间比你预期的短,你也能看到输出。这种方式比用屏幕工具要可靠得多。不过需要注意的是,这可能会带来安全风险。如果这是一个你每隔一段时间就要运行的任务,使用定时任务工具(cron)会更合适。
原始回答
GNU Screen 是处理这个问题的好方法。
编辑:在重新阅读你的问题后,我觉得我之前理解错了。你是想在本地机器上运行一个Python脚本,这个脚本会连接到远程机器上执行某个任意的程序,然后再连接回远程机器查看日志之类的内容吗?