スキップしてメイン コンテンツに移動

Watch dog Timer の設定(Raspbian jessie)

Raspberry pi を安定して利用して行きたいと思うと、どうしてもちょっとしたトラブルの時は自動で再起動して欲しいと思います。
勿論、出来るだけフリーズしない様に設定するのは基本ですし、ハードウェア的にも熱暴走しない様にとかの話は当たり前。
でもやはり万が一の場合はあるわけですから、その時にでもとりあえず動き続けて欲しいですよね。

で、そこで Watch Dog Timer と言うものが登場します。
Watch Dog(番犬)と言うからには自分で自分を監視してくれます。

で、動きが取れなくなったらひとまずリブート。

Watch Dog の情報を集めていたら、どうも無駄な情報があふれていた様なので、備忘録を兼ね書き留めておきます。

まず最初にチェックするのはカーネルのモジュール。
たいていの資料には Watck Dog のモジュールをインストーるするところから始まっているのですが、Jessie ではデフォルトで入っていると言う話も。
で、以下の様に lsmod コマンドで確認して見ると


$ lsmod
Module                  Size  Used by
bnep                   10340  2
hci_uart               17943  1
btbcm                   5929  1 hci_uart
bluetooth             326105  22 bnep,btbcm,hci_uart
brcmfmac              186403  0
brcmutil                5661  1 brcmfmac
cfg80211              428871  1 brcmfmac
rfkill                 16037  4 cfg80211,bluetooth
snd_bcm2835            20447  0
snd_pcm                75762  1 snd_bcm2835
snd_timer              19288  1 snd_pcm
snd                    51908  3 snd_bcm2835,snd_timer,snd_pcm
bcm2835_gpiomem         2976  0
bcm2835_wdt             3225     ← ここに既にインストールされています。
uio_pdrv_genirq         3164  0
uio                     8000  1 uio_pdrv_genirq
ipv6                  347620  36


大抵は古い bcm2835_wdog をインストールする様に書かれています。
でも最新版がインストールされているので、このインストールは不要です。

次が /etc/modules への書き込み。
大体が、
$ echo "bcm2835_wdt" | sudo tee -a /etc/modules
とか書かれていますが、普通に /etc/modules に bcm2835_wdt の1行を追記するだけなので、私は nano で書いてしまいました。

$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

bcm2835_wdt      ←この行を追加

さてここで Watch Dog の制御のパッケージをインストールします。

$ sudo apt-get install watchdog chkconfig
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  chkconfig watchdog
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
   ・
   ・
   ・
   ・
watchdog (5.14-3) を設定しています ...
/run/udev or .udevdb or .udev presence implies active udev.  Aborting MAKEDEV invocation.
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
systemd (215-17+deb8u6) のトリガを処理しています ...

って感じで無事インストール完了。

インストールしたら設定ファイルの修正です

$ nano /etc/watchdog.conf 
#ping = 172.31.14.1
#ping = 172.26.1.255
#interface = eth0
#file = /var/log/messages
#change = 1407

# Uncomment to enable test. Setting one of these values to '0' disables it.
# These values will hopefully never reboot your machine during normal use
# (if your machine is really hung, the loadavg will go much higher than 25)
max-load-1 = 24 ←この行のコメントを削除
#max-load-5 = 18
#max-load-15 = 12

# Note that this is the number of pages!
# To get the real size, check how large the pagesize is on your machine.
#min-memory = 1
#allocatable-memory = 1

#repair-binary = /usr/sbin/repair
#repair-timeout
#test-binary
#test-timeout

# 2017-03-07
#watchdog-device        = /dev/watchdog
watchdog-device = /dev/watchdog ←この行のコメントを削除
watchdog-timeout = 10 ←この行を追加


# Defaults compiled into the binary
#temperature-device =
#max-temperature = 120

# Defaults compiled into the binary
#admin = root
#interval = 1
#logtick                = 1
#log-dir = /var/log/watchdog

# This greatly decreases the chance that watchdog won't be scheduled before
# your machine is really loaded
realtime = yes
priority = 1

# Check if rsyslogd is still running by enabling the following line
#pidfile = /var/run/rsyslogd.pid   


赤字の部分を修正したら、同様に

$ nano /lib/systemd/system/watchdog.service
[Unit]
Description=watchdog daemon
Conflicts=wd_keepalive.service
After=multi-user.target
OnFailure=wd_keepalive.service

[Service]
Type=forking
EnvironmentFile=/etc/default/watchdog
ExecStartPre=/bin/sh -c '[ -z "${watchdog_module}" ] || [ "${watchdog_module}" = "none" ] || /sbin/modprobe $watchdog_module
ExecStart=/bin/sh -c '[ $run_watchdog != 1 ] || exec /usr/sbin/watchdog $watchdog_options'
ExecStopPost=/bin/sh -c '[ $run_wd_keepalive != 1 ] || false'

[Install]
WantedBy=multi-user.target ←この行を追加

最後に WatchDog のサービスを起動して

$ sudo chkconfig watchdog on
$ sudo systemctl enable watchdog
$ sudo systemctl start watchdog

最後に、 Watch Dog が動作している事を確認します。

$ sudo systemctl status watchdog

念のためリブートして再度確認しておくと良いでしょう。

これで、以下のエラー誘発のシェルを作成し、システムが再起動することを確認しておきます。

$ nano forkbomb.sh
#!/bin/bash

swapoff -a
:(){ :|:& };:

$ sudo chmod +x forkbomb.sh
$ ./forkbomb.sh
swapoff: Not superuser.
./forkbomb.sh: 行 4: amp: コマンドが見つかりません
 $ ./forkbomb.sh: 行 4: amp: コマンドが見つかりません
./forkbomb.sh: 行 4: amp: コマンドが見つかりません
./forkbomb.sh: 行 4: amp: コマンドが見つかりません
   ・
   ・
   ・
となって最後にリブートしてくれます。


コメント

このブログの人気の投稿

iPhone を日常使う上での注意(ちょっとした不具合を解消するには)リセットの仕方

先日は バックアップの重要性 について書きましたが、今日は日常の注意を書いて見たいと思います。 まずは充電の方法から。 皆さん、充電時にはどんなことに注意していますか? 充電は、できるだけバッテリーを使い切るぐらいまで行わず、できれば80〜90%で終了させましょう・・・・なんてやっていませんか? 以前にも 充電について 書きましたが、基本的には「気にする事は無い!」です。 好きな時に充電をし、好きな時に終えれば良いです。 上記の注意は「ニッケル系」のバッテリー、つまり市販の単三型などの充電式バッテリーについての注意です。昔はニッケルカドミウム、今ではニッケル水素のバッテリーですね。 これは、時々リフレッシュさせる必要があります(昔の人工衛星も年に2回ほどリフレッシュ運用というものを行っていました)。 しかし、現在携帯電話に使用しているリチウムイオン系のバッテリーでは其の様な事は必要ありません。 と言うより、ニッケル系の様なリフレッシュ運用はかえってバッテリーの寿命を縮める(充放電回数を無意味に増やす)だけです。 バッテリー一般の注意である、充電中に熱を持たない様に注意する(寝る時に布団や枕に覆われた状態で充電するなど)こと、電子機器一般の注意である日向や暖房機の前に放置しない、などを守れば十分です。 何故かは良く分かりませんが、昔の iOS では充電時のマークが、稲妻マーク(充電中)とプラグマーク(充電器に接続されているが充電はされていない:充電は終了している)に分かれていました。 今は同じ稲妻マークだけですが、ひょっとしたらプラグマークになるとあわてて充電器から外そうとする人がいるのを懸念しての仕様変更かもしれません。 基本的に「充電器に接続されている」「Wi-Fi に接続されている」「スリープ状態にある」という三つの条件を満たしていれば、1日に一回「iCloud による自動バックアップ」が実行されます。 一番条件の揃いやすいのは就寝時ですよね? つまり少なくとも寝る前に充電を開始して、朝まで放置しましょうというのがアップルの考え方。その間にバックアップしておきますよという事ですね。 さてその寝る前にあなたは何かしていますか? 私はほぼ毎日、寝る前には動作しているアプリを全て終了させています。 「 何のため? 」それは

スマホの充電

今までも時々 充電に関する話 を書いておりますが、仕事の関係でちょっと調べ物をしていて、そのまま横道に逸れて(内緒ね)人工衛星のバッテリー設計の話をちょこっと摘んできました。 その中で、「放電深度」の話があって、ちょっと面白いので簡単に紹介しようと思います。 新品のリチウムイオンバッテリーがあるとしてその容量を分かりやすく1000mA/h とします。 100%充電されていたとして、そのバッテリーから1000mAの電気を取り出した時が100%、 500mAだけ取り出した時は 50% 、そして300mAしか取り出さなければ 30% を「放電深度」と言います。 よく言われるのは「 80% から 20% まで使って、また 80% まで充電するのが最も良い」と言うものですが、これは 前のブログ で間違っているよと言いました。 80% から 20% ならば 0.6 回利用した計算だよと。 で、最終的に何回充電出来るかは決まっていると書いたのですが、これが間違っていました。 これが放電深度100%では最も回数が少なく、放電深度を50%に(つまり 100% から 50% の間で充放電を繰り返す)と回数的には3倍以上の回数、つまり寿命が3倍以上になるとの 報告 などがあります。 さらに 30% に抑えるとさらに伸びます。 色々調べるとそれが当たり前の様です。 静止衛星の場合でも1日に一回充放電を繰り返すわけですが、周回の人口衛星だと1日に数回地球を回るので、充電期間(昼間上空を通過する時)と放電期間(夜間上空を通過する時)が1日に数回あるわけです。 そんな中で設計時の放電深度は25%程度で設計されている様です。 つまり、放電期間を終了して充電開始時に 75% 以上あって、充電期間を終了する時には100% まで充電されている。 もちろんその間地球観測の観測機械がフル稼働(特に光学観測の場合は昼間が観測時間帯です)してますから、もろに充電しながら使っている状態です。 スマホで「バッテリーが 75%に減ったら、即充電器に繋いで充電しながら使う」って言ったら「バカか! バッテリーがダメになるぞ」って脅されますよね。 でも人工衛星ではそれが常識みたい。 むしろバッテリーを少しでも長持ちさせるためにはその様にすべきの様です。 確か

Apple ID の変更方法

2017/06/10 :追記 Apple ID の変更方法が変更されました。 以下の最新情報をご確認下さい。 アップルIDの変更 Apple ID をキャリアのメールアドレスなどで作成し、その後にキャリアのメールアドレスを変更してしまい、困っている方が多い様です。 皆さん Apple ID に利用しているメールアドレスを変更すれば、iPhone に使用している Apple ID のメールアドレスも自動的に変更されるものと、勘違いしている様に思います。 また、Apple ID はキャリアのものと勘違いしているのか、キャリアを変更したのだから、Apple ID もそのまま、次のキャリアメールのアドレスになると思っている方も、おられるようです。 Apple ID はあくまでもAppleが発行するIDです。 キャリアとは無関係で、キャリアにそのIDに関する情報が渡ることもありませんし、キャリアの情報がAppleに渡ることもありません。 IDに使用するメールアドレスを変更したいのであれば、自分でAppleのウェブサイトで手続きする必要があります。 https://appleid.apple.com/ja_JP にアクセスすると、「Apple ID を管理」というボタンがあります。 そこで、現在の(あるいは勝手に変更してしまう以前の)メールアドレスでログインし、手続きをします。 ここで、新しく利用したいメールアドレスを追加すると、本人確認のメールがそのメールに届くので、メールに記載されているURLにアクセスすると、承認されます。 メールアドレスが承認されると、そのメールアドレスをIDに登録し直せます。 最終的にIDのメールアドレス変更直前に、iPhone(該当 iOS 機器やMac 全て)の iCloud と iTunes & App Store から一度ログアウトしてください。 その際に、iPhone にデータを残す必要はありません。 新しいメールアドレスの ID でログインすればまた同期されてデータが戻ります。 残してしまうと、再同期の際に間違ってマージしてしまい、データが二重登録される可能性があります。 もっとも再同期の際に間違えて、iPhone の(何もない)データで、iCloud を上書きすると、全てのデ

「iCloud では全てがバックアップ出来ない」という大誤解

iOS デバイスのバックアップについて ということで以下にアップルの公式サイトがあります。 https://support.apple.com/ja-jp/HT204136 ここには 【iTunes バックアップでは、デバイスのほぼすべてのデータと設定情報がバックアップされます。】 と 【iCloud バックアップでは、デバイスに保存されているほぼすべてのデータと設定情報がバックアップされます。】 と書かれてます。 「 デバイスのほぼすべてのデータ」と「 デバイス に保存されている ほぼすべてのデータ」の違いはなんだろうってツッコミは置いておいて、その後ろにはバックアップの対象外となる物が並んでます。 iTunes では「 iTunes から同期したコンテンツ (読み込んだ MP3 や CD、ビデオ、ブック、写真など)」が同期の対象外。 iCloud では「ほかのクラウドサービス (Gmail、Exchange メールなど) で保管されているデータ」が対象外。 その他には、 「iTunes Store および App Store から入手したコンテンツ、または iBooks に直接ダウンロードした PDF (このコンテンツは iTunes で「購入した項目を転送」を使ってバックアップできます。)」 とか 「iCloud ミュージックライブラリおよび App Store のコンテンツ (すでに購入済みのコンテンツは、iTunes Store、App Store、または iBooks Store で取り扱い継続中であれば、タップして再ダウンロードできます。)」 とあって、微妙な表現の違いはありますが、まぁ実用上は同じと考えて良さそうですよね。

コジマ電気のお客様対応の態度

実はだいぶ前から書こうか迷っている話題があります。 しかしやはり、 ひとまずお店の名前は伏せた形で 書いておこうと思い、書きます。 それは そのお店 コジマ電気のポイントカードに関するものです。 で、トラブルそのものも問題ですが、その後のお店(店長)と本社の対応が酷い。 最終的に、本社のお客様相談室に質問状を出しました。 さすがに内容証明付きで出すのもなんだったので、書き留めにして出したのですが・・・7月20日すぎに出したものの、未だになしのつぶて。 よっぽどその内容を公開して欲しいのかと思ってしまいます。 で、その内容を地名と店舗名を伏せただけで、そのまま記載してみようと思います。 怒りがこみ上げてきて余計なことを書いてもいけませんからね。 下書きをパソコンで行っていますのでそれを丸ごとコピーします。 先ずは、以下がその内容です。 --- ここから --- ○○○ コジマ 電気 お客様相談窓ロご担当者様 個人情報保護担当責任者様 2015年7月X X日 先日の7月5日に、 ○○○ コジマ電気 △△ 店におきまして、 ○○○ コジマカードの記載事項のトラブルが、発覚致しました。その際の説明と対応に疑問がありますので、質問させて頂きます。是非文書、書面での回答をお願い致します。 先ず、経緯を記します。 1.古いアナログTVの処理のため、TVを ○○○ コジマ電気△△店に持ち込む。 2.処理のため、住所氏名を用紙に記入。 3.ポイントは付かないものの、カードに利用記録を記載できるので、 ○○○ コジマカードがあれば、と言われ、カードを渡す。 4.カード記載の住所氏名が、用紙に記載の住所氏名と違うと言われる。 5.カードを作成した店舗と、時期を確認されるが、記憶が定かでなく、「川崎から、世田谷へ引越し後に△△店で作成した気がする。 しかし、 引越し以前に作成したとすれば、××× 店で作成、その後住所変更をしたはず」と答えた。 6.住所が川崎ならば、×××と言ったが、×××ではないとの答え。 その時に表示画面が見え、電話番号だけは確認できたが、古い、×××に住んでいた時の電話番号であった。 その時は、状況がよく把握できず、最終的に店長が対応し、調査して連絡することを約束。 7.7月10日 20時08分から 37分間、店か