我发现这段代码我无法找到退出尾部的好方法并转到脚本的下一部分。基本上我是第一部分,对运行脚本的人进行更改,使用下面的代码显示日志输出,然后转到用户按键上的脚本的下一部分。没有CTRL-C,我无法摆脱尾巴。
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
更新 -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!"
答案 0 :(得分:0)
您已将-f
命令行选项提供给tail(1)
。这明确指示tail(1)
在用户键入^C
或以其他方式终止程序时退出。如果您只想显示特定数量的文件并且不,则可能希望使用-n
命令行选项:
channel.exec "tail -n 24 #{file}"
24
将显示大约一个终端的数据,但如果您的终端更大或更小 - 或者您对不同数据量感兴趣 - 那么您可能希望进一步调整它。
tail(1)
很强大;它是值得阅读它的文档,以防万一有更好的方法去做你想要完成的事情。
答案 1 :(得分:0)
我找到的解决方案是使用less
而不是尾巴。试试这个:
less +F filename; echo 'after less'
当你点击ctrl + c时,q会减去它会退出然后回显你想要的东西。