ryoです。好きなアーティストは「神様、僕は気づいてしまった」です。略称 神僕
神僕の曲で、「ウォッチドッグス」が特に好きです。
そこで今日はウォッチドッグタイマーについてRubyで表現できるか挑戦しようと思います。
自分の読解力に自信がなくて、ウォッチドッグタイマーの解釈を間違えているかもしれません。
間違えていたらご指摘いただけたらありがたいです。
この記事を読んで身につくこと
- ウォッチドッグタイマーが何かがわかる。
- Rubyでウォッチドッグタイマーを表現できるようになる
目次
- ウォッチドッグタイマーとは何か
- 作る内容
- 事前準備
- 完成コード
- 各コードの解説
- 終わりに
##ウォッチドッグタイマーとは
システムを定期的に監視して、異常があった場合リセットするためのタイマーのことです。
ウォッチドッグ(watchdog)は番犬という意味だそうです。
ここで大まかなイメージを説明しています。wikiとかもありますが、リンクは俺の好みで選びました。
作る内容
1.秒数を数える
2.3秒ごとに異常がないか確認する。
3.ランダム(4分の1)で寝ている。
4.寝ていた場合、1秒からやり直す
5.15秒まで起き続けられたら処理終了
事前準備
定期実行のプログラムを作成したいので
gemのTimersをインストールします。
gem install timers
完成コード
require 'timers'
def watchdog
random = rand(4) + 1
if random == 1
@sleep = true
end
end
@time = 1
timers = Timers::Group.new
puts @time
timers.every(1) {
@time += 1
puts @time
}
timers.every(3) {
@sleep = false
watchdog
if @sleep == true
puts "zzzz"
@time = 0
else
puts "ワンワン!"
end
if @time == 15
exit
end
}
loop { timers.wait }
出力結果
1
2
3
ワンワン!
4
5
6
zzzz
1
2
3
ワンワン!
4
5
6
ワンワン!
7
8
9
ワンワン!
10
11
12
ワンワン!
13
14
15
ワンワン!
各コードの解説
事前準備でインストールしたtimersを呼び出せるようにします。
require 'timers'
1秒経つごとに秒数を出力していきます。
@time = 1
timers = Timers::Group.new
puts @time
timers.every(1) {
@time += 1
puts @time
}
3秒ごとに
・起きているか確認。起きていたらワンワンと出力
・寝ていたらzzzzと出力し、タイマーを1からリスタート
timers.every(3) {
@sleep = false
watchdog
if @sleep == true
puts "zzzz"
@time = 0
else
puts "ワンワン!"
end
起きてるかどうか確認(4分の1寝ている)
def watchdog
random = rand(4) + 1
if random == 1
@sleep = true
end
end
15秒起き続けてたら処理終了
if @time == 15
exit
end
処理終了するまで繰り返しをする記述
loop { timers.wait }
終わりに
コードを打っているうちに、本当にこれでいいのか不安になってます。。違うってはっきりわかったら作り直すかもしれません。
後、猫派なんですが、番犬じゃなくて番猫とかいないんですかね。
ウォッチキャットタイマー。ちゃんと監視してくれなさそう。
お疲れ様でした。