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

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: コマンドが見つかりません
   ・
   ・
   ・
となって最後にリブートしてくれます。


コメント

このブログの人気の投稿

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 を上書きすると、全てのデータが失われるので、それよりはマシですけど。

なお、使用…

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

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

さてその寝る前にあなたは何かしていますか? 私はほぼ毎日、寝る前には動作しているアプリを全て終了させています。
「何のため?」それは
「メモリを解放するため」です。 メモリを解放するアプリ…

同期とバックアップ

どうも iPhone や iPod Touch 、 iPad などで iTunes や iCloud との同期設定をきちんと行わず、バックアップなども行っていない方が多く居られる様です。
また、同期やバックアップすると、メールの設定や連絡先などのデータが無くなる、とかいうデマに振り回され、怖がっている方も多い様です。
そこで出来るだけ簡単に、その必要性とやり方を、書いておこうと思います。


まずバックアップの必要性。 これは何も言う事は無いはずです。
万が一 iPhone が故障したり、紛失したりした場合、このバックアップが無いと、全てのデータを失います。
バックアップが有れば、新しい iPhone でも、バックアップ時点の状態に戻せます。
バージョンアップ時も同じですし、新型への機種変の時も同じです。
バックアップが無ければ、初期状態から設定し直さなければいけません。
しかしバックアップを取った後に、受信したMMSメールや写真は、失います。
なので、出来るだけこまめにバックアップをする必要があります。
理想的には毎日行うことです。

次に同期。CDから iTunes に入れた音楽、逆に iPhone で購入した音楽、アプリなどは同期作業によって iPhone に入れたり iTunes にバックアップしたりします。
写真や動画なども同じです。
好きなものを持ち歩いたりするのであれば、同期は必要ですね。
同期の作業は、その始めのステップとして、バックアップを行いますから、バックアップのためにも、必要な作業となります。


現在は iCloud のサービスもあり、同期も重要項目です。
同期とは二つ以上のものを、同じ状態に保つ作業です。
現在の iPhone であれば、iCloud をその同期の中心にし、個々の機械(パソコンや iPhone )が同期を取ります。

iCloud は常に最新の状態が保たれます。
必要であれば、パソコンから iCloud のウェブサイトにアクセスして、利用することもできます。
しかしなぜか、iOS 機器からは、通常の iCloud のウェブ利用はできません。

連絡先などは、iCloud を利用する事で、グループ分けなどが簡単に出来ます。
こちらもなぜか iOS 上では、グループ分けの作業は出来ないのですが、iCloud で行ったグループ分けは利用出来ます。
ウェブサイト上で…