我使用Ruby Net/SSH啓動nohup遠程腳本。Ruby Net/SSH exec - 獲取遠程進程的pid
Net::SSH.start(ip_address, user, options) do |ssh|
script = File.join(remote_path, 'run_case.py')
cmd = "nohup python #{script} #{args} < /dev/null &"
ssh.exec(cmd)
end
所有stdout
和stderr
保存到遠程計算機上的文件。
是否有可能獲得遠程腳本的PID,以便我可以在需要時將其終止?
編輯1: 我修改了建議的腳本。
Net::SSH.start(ip_address, user, options) do |ssh|
script = File.join(remote_path, 'run_case.py')
cmd = "nohup python #{script} #{args} < /dev/null & echo $! > save_pid.txt"
ssh.exec(cmd)
pid = ssh.exec!("cat save_pid.txt")
puts mesh_pid
end
它抱怨說找不到文件。這是因爲文件不存在嗎?如果可能的話,我寧願避免任何sleep
命令
編輯2:也許這不是優雅,但它的工作原理。我創建了第二個ssh
會話並使用pgrep
。
Net::SSH.start(ip_address, user, options) do |ssh|
script = File.join(remote_path, 'run_case.py')
cmd = "nohup python #{script} #{args} < /dev/null &"
ssh.exec(cmd)
end
Net::SSH.start(ip_address, user, options) do |ssh|
cmd = "python #{script} #{args}"
mesh_pid = ssh.exec!("pgrep -f '#{cmd}'")
puts mesh_pid
end
爲什麼要投票? – Rojj
我投了票,因爲你的編輯沒有意義。在將代碼張貼回來之前,您是否在代碼中查看了一秒? – hek2mgl
我明白了。是的,我忘記了第一條命令的改變。該死的複製和粘貼。 – Rojj