Ruby Net/SSHを使用してnohupリモートスクリプトを起動します。すべてのstdout
とstderr
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
は、リモートマシン上のファイルに保存されます。
リモートスクリプトの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
コマンドを回避することをお勧めします。
EDIT 2:多分これはエレガントではないが動作します。 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