运行分叉脚本时,SSH会话保持打开状态

时间:2018-01-28 01:52:24

标签: python linux ssh tunnel

我有一个父脚本(start.py),其主要目的是启动后台进程并退出。当我直接ssh到remote_host并运行脚本时,它按预期工作。

[user@local_host ~]# ssh remote_host
user@remote_host's password: ****
[user@remote_host ~]# time python start.py --config_file /data/workload.pg
real    0m0.037s
user    0m0.025s
sys     0m0.012s

此脚本的退出代码:

[root@perf72 ~]# echo $?
0

为了简化,我不想先建立ssh会话并运行命令,而是想从local_host远程执行命令:

[user@local_host ~]# ssh -o StrictHostKeyChecking=no -i /tmp/tmpqcz5l5il user@remote_host -p 22 "python start.py --config_file /data/workload.pg"
real   12m6.594s
user    0m0.027s
sys     0m0.016s

这里的问题是ssh会话在后台进程的生命周期内保持打开状态,而不是start.py脚本的生命周期小于一秒。它应该在start.py脚本退出时断开连接,但它不会。

我是否需要start.py脚本中的特定sys.exit()信号,这将提示ssh会话断开连接?

1 个答案:

答案 0 :(得分:1)

ssh正在等待被调用进程stdout的输出,所以如果有的话可以打印它。该文件句柄由您正在生成的子进程继承,因此即使python脚本已退出,它仍然处于打开状态,只要它已打开,ssh就会一直等待。

如果更改ssh命令行以将远程脚本作为"python start.py --config_file /data/workload.pg > /dev/null"运行,则ssh连接将在python脚本执行后立即关闭。