0
我在本地计算机上安装了Oracle瘦客户机以在远程主机上执行SQL命令。 另外,我有一个包含SQL命令的Ruby脚本(使用OCI8 gem),脚本工作正常。终止分叉进程(转发端口)
但是,要我需要打开一个隧道,转发到远程Oracle监听的端口的SQL命令:
ssh -L 1521:localhost:1521 <user>@<host>
运行此命令登录我到远程主机,我不想。
我找到了下面的命令来运行,它创建了一个隧道,转发了特定的端口,并且我可以成功地运行包含SQL命令的Ruby脚本。
tunnel = fork do
exec "ssh -f <user>@<host> -L 1521:localhost:1521 -N"
end
因此,隧道是在后台创建的,但是,我也需要终止隧道,从远程实例断开连接。我尝试了以下方法:
Process.kill('HUP', tunnel)
但是,隧道并未死亡。
有没有一种方法可以在Ruby脚本中终止/终止隧道?
感谢信息。然而,你的解决方案没有奏效,隧道仍然保持开放。当然,我仍然可以运行ruby脚本,成功运行sql命令,对远程oracle数据库实例 – user2872898 2015-01-20 23:22:24
。 '-f'选项创建一个子子进程,如果不跟踪具有哪个PID的子进程,它就会被分离。如果你可以避免'-f',你可以直接管理隧道。 – tadman 2015-01-21 19:22:32
感谢您的更新。 tadman。现在我发现一个解决方法,仍然使用-f,但是我删除了“-N”标志,而是传递了一个睡眠值,exec“ssh -f @ -L 1521:localhost:1521 sleep 60”这样隧道被创建,但在达到睡眠时间后终止。 –
roland
2015-01-22 21:08:59