所以我有一个脚本每分钟检查一次HTTP状态,如果它不是200(OK)我会发一封电子邮件说出来了。问题是如何只发送一次电子邮件,直到状态发生变化(然后再次发送电子邮件)。我不想在循环过程中每分钟发送垃圾邮件。谢谢。
这是我的循环:
loop do
if foo_response_status == false || bar_response_status == false
send_email
end
puts foo_response_status.kind_of? Net::HTTPSuccess
puts bar_response_status.kind_of? Net::HTTPSuccess
puts Time.now
sleep 60
end
答案 0 :(得分:1)
通过使用在循环外声明的变量,您可以跟踪以前的状态。此代码检查new_status和old_status是否相同;如果是这样,它使用continue
跳过循环中的其余代码。
old_status = false
loop do
new_status = foo_response_status == false || bar_response_status == false
next if new_status == old_status
send_email if new_status == false
old_status = new_status
puts foo_response_status.kind_of? Net::HTTPSuccess
puts bar_response_status.kind_of? Net::HTTPSuccess
puts Time.now
sleep 60
end
答案 1 :(得分:0)
使用break
loop do
if condition === true
break
end
end
这将导致循环退出循环。
在你的情况下,它会像
if foo_response_status == false || bar_response_status == false
send_email
break
end
这将在发送电子邮件后停止循环。注意,如果重新执行脚本(例如,在cron中),这不会阻止循环再次运行