我が家でラズパイで運用しているhomekitエミュレータのhomebridge何ですが、結構頻繁に動かなくなる時があるんですよね。みなさんどうですか?
どういう状態かと言うとこんな状態のまま、一切反応してくれなくなってしまいます。

こんな時にどうすれば良いのかと言うと、やり方としては再起動かけちゃうのが一番手取り早いですね。正直もしかしたらhomebridge側のアプリ問題もあると思いますが、そこのデバッグは開発者に任せるとして今回は我が家と同じようにhomebridgeアプリ運用しているんだけど、なんかよくフリーズしてしまって困っている方向けに、対策と設定方法を教えていきたいと思います。
復旧方法
早速復旧の仕方何ですが、そもそも何でフリーズしているかというのは正直わからない。しかしおそらくサービスを起動直後は問題なく動いているので、おそらくサービスを動かし続けることによるメモリ(ゴミ)が溜まってしまっているんだと思います。
そのため、基本的には再起動をかけてあげればhomebridgeが復旧するはずです。
復旧方法は以下の2種類から試すことができます。
ラズパイを再起動
まずは一番手取り早いのは、ラズパイ毎の再起動ですね。
以下コマンドを打てば、再起動できるはずです。
pi@raspberrypi:~ $ reboot
もしくはあまり推奨はしませんが、ハードウェアの電源毎抜き差しすれば、復旧するとは思います。
homebridgeサービスだけ再起動
次にもう少し再起動の範囲を狭めて、homebridgeのアプリだけ再起動する方法です。
homebridgeのデーモンサービス化が済んでいる人であれば、以下のコマンドで再起動がかけられるはずです。
pi@raspberrypi:~ $ sudo systemctl restart homebridge
もしエラーが出るようであれば、homebridgeが二重起動している可能性もあるので、以下コマンドで一度サービスを全て消してからもう一度試してみてください。
pi@raspberrypi:~ $ sudo systemctl stop homebridge
これで再度iPhone側で状態をみているとhomebridgeが無事に起動していることが確認出来ると思います。
定期的に再起動をかける
と、ここまで再起動の設定を書きましたが、正直一度再起動かけただけでは済まないぐらい我が家ではラズパイフリーズが発生しているので、もうこの際定期的に再起動をかけるように設定し直しました。
こういう風に自分好みに設定をイジれるのも自宅サーバの良いところですね。
crontabを使う
サービスを定期的に再起動させるためには、crontabと呼ばれるアプリを使用します。crontab自体は、ログインユーザー毎に設定できるんですが、サービス制御するsystemctl自体がroot権限が必要なので、今回はrootユーザーのcrontabに設定していきます。
pi@raspberrypi:~ $ sudo crontab -e
このコマンドを打つとviエディターで入力ができるようになるので、escキー -> iキーを入力して、挿入モードを変えましょう。
そして一番下の行に以下を追記してください。
10 1,4,7,10,13,16,19,22 * * * /bin/systemctl restart homebridge
このコマンドの意味は毎日1時、4時、7時、10時、13時、16時、19時、22時の10分にhomebridgeを再起動させるという設定にしています。これはどういうことかというと、他のサービスとの関係でほんの少しタイミングをずらして再起動をかけたかったので、我が家ではこうしています。
もっと他のタイミングで再起動をかけたいという人であれば、crontabの書き方としては、* * * *:設定項目は左から「分」「時」「日」「月」「曜日」となっているので、それぞれ設定する数値は以下を入力することができる。
設定項目 | 値 |
分 | 0-59 |
時 | 0-23 |
日 | 1-31 |
月 | 1-12 |
曜日 | 0-7 (0と7は日曜) 0=日、1=月、2=火、3=水、4=木、5=金、6=土、7=日 |
複数の時間で実行させたい場合は、0,10,20,30のようにカンマで区切ってあげるやり方や、1-5のように範囲で指定したり、*/10などのように10間隔で実行なども自由に設定できる。
最後に
設定方法はこんな感じになります。因みに我が家ではこの設定をしてから、ほとんどラズパイフリーズに直面することはなくなりました。
もしラズパイがなんか調子悪いという時にはこの技も使ってみてください。
コメント