RaspberryPiのスタートアップで盛大に躓いた話
スタートアップ時に自動的にiBeaconを取得したかった
起動してSSHで入り、コマンドと叩かないと動かないのはいささか面倒。
じゃあ、スタートアップにしておこうっとした時にずっこけたお話
iBeaconの受信について
ありがたい記事があるので、こちらを参照。
使用したRaspberryPiは3なので、無線LANはもといBluetoothも備わっているため、特に設定は不要でプログラムを走らせれば受信できます(たしか…)
なので、rc.localに記述すれば動く!…はずだったのですが、ダメでした。
問題点
ちょくにコマンド叩けば動くのに、何故!?ほぼ同じ動作をさせているだけなのに!
っと思ったところ、rc.localの起動速度が早すぎるためnodejsが立ち上がる前に動いて動かなかったようです。
盲点でした…
これを解消するために考えられるスタートアップ軍を試してみました。
スタートアップの種類にはこちらの方の記事がGOOD
いざ、ローラー作戦!
方法 | 可否 |
---|---|
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の自動起動で躓いたのもいい思い出…