このコードスニペットが見つかりました。私は、テールを終了してスクリプトの次の部分に進む良い方法を見つけようとしています。基本的には、スクリプトを実行している人に変更を加え、以下のコードを使ってログの出力を表示し、ユーザーのキー入力時にスクリプトの次の部分に移動する最初の部分です。私はCTRL-Cを使わずに尾から出ることはできません。ruby exit tailとkeypressからスクリプトの次の部分に進みます
def do_tail(session, file)
session.open_channel do |channel|
channel.on_data do |ch, data|
puts "[#{file}] -> #{data}"
end
channel.exec "tail -f #{file}"
end
end
Net::SSH.start("server", "user", :keys => ["/user/.ssh/id_dsa"]) do |session|
do_tail session, "/var/log/apache2/error.log"
do_tail session, "/var/log/apache2/access.log"
session.loop
end
UPDATE -fは、I/Oを引き継ぎ、それは難しいことSSHチャネルを終了することができます。私は提案に向かって移動し、それを変更することに決めました。他の人がこのトピックに関する助けを求めている場合の結果です。
require 'rubygems'
require 'net/ssh'
def exit?
begin
while input = STDIN.read_nonblock(1)
return true if input == 'q'
end
false
rescue Errno::EINTR
false
rescue Errno::EAGAIN
false
rescue EOFError
true
end
end
def do_tail(session, file)
session.open_channel do |channel|
channel.on_data do |ch, data|
puts "[#{file}]\n\n#{data}"
end
channel.exec "tail -n22 #{file}"
end
end
def loggy
iteration = 0
loop do
iteration = (iteration + 1)
Net::SSH.start("server", "user", :keys => ["/user/.ssh/id_dsa"]) do |session|
do_tail session, "/var/log/apache2/error.log"
end
puts "\n\nType 'q' and <ENTER> to exit log stream when you are done!\n\n"
sleep 5
break if exit? or iteration == 3
end
end
loggy
loop do
puts "\nDo you need to view more of the log? (y/n)\n"
confirm = gets.chomp
if confirm =="y"
loggy
else
end
break if confirm == "n"
end
puts "Part Deaux!"
ファイルの一部だけに 'tail'を実行させる' do_tail'関数にはパラメータを渡していないことに注意してください。 「ログの詳細を表示する必要がありますか?」という質問です「ログに戻って見る」または「変更した場合に備えてログファイルの最後の22行を表示する」という精神の中で意図されていますか? – sarnold
おそらくやるべきことはもう少し後退して、達成しようとしていることを説明することです。このスクリプトは何を手助けしていますか? – sarnold