gosoly

ゆっくりと趣味に浸る。

RaspberryPiのスタートアップで盛大に躓いた話

DSCF1461.jpg

スタートアップ時に自動的にiBeaconを取得したかった

起動してSSHで入り、コマンドと叩かないと動かないのはいささか面倒。
じゃあ、スタートアップにしておこうっとした時にずっこけたお話

iBeaconの受信について

ありがたい記事があるので、こちらを参照。

qiita.com

使用したRaspberryPiは3なので、無線LANはもといBluetoothも備わっているため、特に設定は不要でプログラムを走らせれば受信できます(たしか…)

なので、rc.localに記述すれば動く!…はずだったのですが、ダメでした。

問題点

ちょくにコマンド叩けば動くのに、何故!?ほぼ同じ動作をさせているだけなのに!
っと思ったところ、rc.localの起動速度が早すぎるためnodejsが立ち上がる前に動いて動かなかったようです。
盲点でした…

これを解消するために考えられるスタートアップ軍を試してみました。
スタートアップの種類にはこちらの方の記事がGOOD

hendigi.karaage.xyz

いざ、ローラー作戦

方法 可否
rc.local ×
crontab ×
autostart
init.d ×
systemd ×

このような結果になりました。

今思えば、nodejsの起動が遅いのが問題なのでそっちをどうにかすれば良かった気がします。

crontabの@reloadも結構遅いのではないかと期待してたのですが、GUI起動にかかってくるautostartの遅さにはかないませんでした。
迷ったらautostart、覚えておくといい…

また、一番使うであろうrc.localですが、とても起動速度が早いうえに権利者権限で動くので、便利ですが気をつけた方が良さそうです。

RaspberryPi自体がスタートアップしなくなった場合

スタートアップに間違った記述をするとPi自体がスタートアップしなくなります。
rescue modeを使うか、microSDをPCで読み込みスタートアップを書き加えたファイルを戻すのが吉です。

自分はrc.localにアホな記述をしてしまい、後者の手段でrc.localをすっきりさせて復活させましたw

おまけ

nodejsのスタートアップ

パッケージ管理ツール入れると、管理ツールの起動タイミングでの動作になります。
おおよそ、普通にインストールした時が設定しない限りは最も順序的に早いはずです。
また、npmから入れるバージョン管理ツールのnがnpmに付随するため、特に設定をしなくとも通常と肩を並べる早さです。

GitHub - tj/n: Node version management

foreverを使いデーモン化させたHubotの自動起動で躓いたのもいい思い出…