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