はじめに
ゼミ室のラズパイ(Volumio)がよく落ちているのでそれの原因突き止めるためにやってみました。
みんなで開発できやすいようにと、公開もできるように環境構築もやってみたのでメモです。
今回はまず原因突き止めのためにCPU温度のAmbientに送ってログをとってます。
環境
- ラズパイ2B+ (Volumio ver2.668)
- (ラズパイ内)node v8.11.1
- (ラズパイ内)npm v5.6.0
最新のvolumioでもnodeのバージョンはv8ですのでこれからあえて変えずにいきます。
実装
概要

ラズパイは前述したとおりなんかよく落ちるし、起動しなくなっちゃってOS再インストールなんてこともある。
ので、ラズパイだけにソースコードがあるのがよくないでした。(落ちなかったとしても怖いですよね)
さらにアプリ導入も簡単にしたかったでした。
本来ならばdockerなど環境そのままもっていきたいのですが、dockerを入れるところで躓いたのでそれはまた今度で...
keyファイルについて
https://www.rhoboro.com/2016/06/28/environment-variables.html
これのうちの「別ファイルに書き出し、そこから読み取る」でやってみました。
環境変数は犯したくないってのは思いますよね。
また、githubのプライベートリポジトリにしてもよかったのですが、あえてパブリックにしてオープンなゼミにしようという感じです。
ちなみに自分はすでに卒業して結構経ってます...
Githubで共有しています
ということでコードはオープンにgithubにあげています。
https://github.com/amaokalab/LabpiDev
オーガナイズなアカウントっぽいのでゼミ生で共同開発できるのもいいところですね。
使い方、実行方法もいちようreadmeに書いたあります。
簡素ですがこれでゼミ生全員がラズパイ復旧できるようにできたらなと思っています。
foreverについて
実行タイミング
CPUTempLog/send2AmbiInterval.js内から一部抜粋
async function main() {
// 0分ちょうどだけ送りたい
let nowTime = new Date();
if (nowTime.getMinutes() != 0) {
return;
}
...
}
// 1分に一回だけ処理
setInterval(main, 60000);
foreverを使ったものってcronと違い「1時間毎」になってしまい「00分の時」にできなかったでしたが、このようにすることで同じように「00分の時」を実現しました。
そもそもvolumioにcronは最初からは入ってないですし...
ローカルにインストール
本来は
npm i -g forever
でグローバルにインストールするのが普通ですが、グローバルを犯さないということを徹底してみました。
foreverを同じように実行するにはプロジェクトフォルダ内にて
./node_modules/forever/bin/forever list
などで実行します。
逆に面倒ですかねぇ...
追記
ptxコマンドを使うとよさそうです
https://qiita.com/lambda_funtaro/items/865f178628a035acbe5a
再起動時
sudo nano /etc/rc.local
ちなみにvolumioにはviも入っていないのでnanoで
cd /home/volumio/LabpiDev
npm run cpuForever
exit 0
こんな感じに書きました。
グローバルを犯しました。残念...
これで実行されるとsudoで実行したことになるので、foreverのlistを見たいときもsudoをつけます。
sudo ./node_modules/forever/bin/forever list
これも結局グローバルにインストールすべきかもなぁ...
ゼミ生はこれで使えるようになったのか
これから見ていきたいです。
肝は
- keyファイル
- Ambientのキー類の入力
- 再起動時の設定
今度は、UPSやモバイルバッテリーを使ったりして対策するのが普通ですね。