NanoPi NEO2 Black 起動時にNode.jsのスクリプトを自動起動

投稿者: | 2021年4月4日

前回、 NanoPi NEO2 Blackに Node.js を入れて、OLED HATへの表示や、GPIOに繋がったプッシュボタンのイベント取得する為のスクリプトを組みました。今回はそんな Node.js アプリを機器起動時に 自動起動 させてみようと思います。
まず、NanoPi NEO2 BlackにインストールされたNode.jsの現状は以下の通りです。

foreverを試す

Node.jsで自動起動と言うとまずこのforeverがヒットすると思います。グローバルでインストールする必要がありました。

使い方は、「forever start ファイル名」でプロセスは実行を続けます。

ログや標準出力情報を見るには、ファイル名を確認し、別途tailする必要が生じたので少し手間かも知れません。ログファイル名はforeverのオプションで指定出来るのですが、そのオプションを記述する位置に気をつけなくてはならないような指摘も散見され、私もうまく機能させることが出来ませんでした。

さらにforeverでOLED HATを表示させるスクリプトを動かしたまま機器を再起動させると、表示が残ったまま再起動してしまいます(もちろんまだrc.localやcronに起動登録させていないので、再起動後にスクリプトは動いていない)。さすがにこれでは気持ち悪いので、代替を探すことにしました。

pm2を試す

foreverより高機能と言われているのがこのpm2。forever同様、グローバルでインストールします。

pm2を使ってNode.jsスクリプトを自動起動させるにはまず、pm2をsystemdに登録して自動起動するようにし、続いてpm2にNode.jsスクリプトを登録させます。てっきりforeverの様にrc.localかcronに手書きするつもりでいましたが、なかなかスマート。systemdへの登録もコマンド一発でとても簡単です。

foreverと同様に、「pm2 start ファイル名」でプロセスは実行を続けます。logオプションが標準出力まで網羅されていて、tailされるのでとにかく快適。

スクリプトファイルを書き換え、その動作に反映させたい場合はrestart、そしてstartさせたスクリプトはsaveすれば、機器再起動後もpm2が自動的に開始してくれます。

逆に次回起動時には自動開始して欲しくない場合には、スクリプトをstopさせ、その状態をsaveさせれば良いことになります。

状態の確認はこのstatusオプションの他に、monitモニタオプションがログ機能も兼ねていて秀悦です。

図1.pm2 monit

図1.pm2 monit

起動直後にはIPv6アドレスしか無い?

前記事でLANポートのIPアドレスを取得するのに参照しているos.networkInterfaces()オブジェクト内のeth0項は平常時は次のようになっているのですが、どうも起動直後はIPv6がしかいないのかもしれません。

図2.起動直後IPv6が表示されIPv4が被る現象

図2.起動直後IPv6が表示されIPv4が被る現象

実はこの現象により、OLED液晶に文字列をプリントする際、一度空白でその行を埋め尽くすという常套手段を思い出させてくれました。

本来ならば範囲をきちんと指定してoled.fillRectした方が格好良いのかもしれませんが。

 

ともあれこれでNano Pi NEO2 + OLED HAT をNode.jsで操作するお膳立ては整いました。次回はいよいよギガビットイーサを活かした、インターネットスピードテスタの製作です。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA