【问题标题】:Use ssh to launch remote process and exit使用 ssh 启动远程进程并退出
【发布时间】:2018-09-07 20:04:46
【问题描述】:

我正在尝试使用ssh 从命令行使用以下命令在远程服务器上启动 python 服务器:

$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
-o ConnectTimeout=5 -f -i mykey.pem user@99.99.99.99 \
'python -m SimpleHTTPServer 3000 & echo $! > /home/user/pysrv.pid'

启动后,我的ssh 会话进入后台,但在 python 服务器运行之前不会退出。有没有办法可以设置命令,使 ssh 不会作为我当前机器上的后台进程存在?

【问题讨论】:

  • 您可以使用屏幕或关闭所有文件描述符see

标签: linux ubuntu ssh


【解决方案1】:

你可以的

nohup python -m SimpleHTTPServer 3000 & echo $! > /home/user/pysrv.pid &

它将创建一个不需要父 (ssh) 的分离任务。

OTOH,如果您终止 ssh 服务器进程,您将无法再次连接。这是你想要的,还是你只是想杀死会话?如果只是会话,连接断开后它应该会自行消失。

【讨论】:

  • 感谢您的回复。它没有帮助。我仍然在后台看到 ssh 进程。
  • ps 是否显示“?”还是真正的PID?这 ”?”任务只是想要清理。
  • 想要 -> 等待
  • 实际上它显示一个 PID 但一个 ?在 TTY 列中。另外奇怪的是远程服务器中的python进程也显示了?我无法向它发送请求!
  • TTY ?表示该进程未附加到会话,这就是为什么您无法与其交谈并且应该能够断开连接并使其继续运行的原因。
【解决方案2】:

当 TCP 连接关闭时,ssh 命令退出。如果重定向远程命令的stdinstderr,TCP 连接不会连接任何东西,它会关闭。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 -f -i mykey.pem user@99.99.99.99 'python -m SimpleHTTPServer 3000  2>/dev/null 2>&1 </dev/null& echo $! > /home/user/pysrv.pid'

【讨论】:

  • 这不起作用,或者 ssh 进程在进程列表中仍然处于活动状态。
  • 我们需要重定向python进程的I/O,而不是echo。尝试更新的答案。
猜你喜欢
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2018-08-16
  • 1970-01-01
  • 2013-05-16
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多