Raspberry Piで自動起動する方法
Raspberry Piにはプログラムを自動起動する方法がたくさんあります。それぞれ特徴があるので、自分が簡単と思う順にまとめていきます。自分もブートの仕組みちゃんと全部理解できていないので徐々にまとめていこうと思います。
大きくは以下5つがあるという認識です。
- /etc/rc.local
- autostart
- crontab
@reboot
- /etc/init.d
- systemd
/etc/rc.local
/etc/rc.local
に自動起動したいコマンドやスクリプトを書くと、起動時に実行されます。好きなエディタで編集しましょう(以下はvimの例です)。
$ sudo vim /etc/rc.local
ファイルの最後にexit 0
とあるので、その手前に起動時に実行したいコマンドをを書きます。hogehoge
というコマンドだったら
hogehoge
exit 0
と書きます。自作のスクリプト(例えば hogehoge.sh
とします)を使いたい場合は /usr/local/bin/hogehoge.sh
に置いて、/etc/rc.local
に以下のように書くのがよいかと思います。
hogehoge.sh
exit 0
なお、/etc/rc.local
に書かれたコマンドは、root権限で実行されます。
crontab @reboot
cronを使って起動時にプログラムを走らせることもできます。ユーザー権限でプログラムが実行されるので、root権限で走ったら困るようなプログラムに使えます。例えばROS(Robot Operating System)のノードを立ち上げるときは、crontabを使うのも良いと思います。
以下コマンドでcrontabを修正します。
$ crontab -e
以下のように追記します
@reboot /home/pi/hogehoge.sh
これで起動時にhogehoge.sh
が実行されます。
autostart を使用する方法
いわゆるWindowsのスタートアップにあたるものです。GUIのプログラムを起動時に実行したいときに使います。Raspbian Buster以降とそれ以前で設定方法が異なるので注意して下さい。
Raspbian Buster以降でのautostart設定
以下コマンドを実行して、autostartファイルの雛形を、ホームディレクトリのコンフィグにコピーします。
$ mkdir -p ~/.config/lxsession/LXDE-pi
$ cp /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/
あとは、~/.config/lxsession/LXDE-pi/autostart
ファイルに実行したいコマンド名を追記するだけです。
今回はxeyesというマウスを目玉で追うというアプリでテストしてみましょう。まずは以下コマンドでxeyesをインストールしておきます。
$ sudo apt update
$ sudo apt install x11-apps
これで /usr/bin/xeyes
とターミナルで実行すると目玉が表示されます。このアプリを自動起動するためには、以下コマンドを実行して、autostartファイルに/usr/bin/xeyes
を追記します。
$ echo '/usr/bin/xeyes' >> ~/.config/lxsession/LXDE-pi/autostart
この後、再起動すれば、以下のように自動的にxeyesが起動します。
Raspbian Buster以前でのautostart設定
以下コマンドでautostartというファイルを作成します。
$ vim ~/.config/lxsession/LXDE-pi/autostart
/home/pi/hogehoge.sh
を起動したい場合は、以下のように記載します。
@/home/pi/hogehoge.sh
autostartで自動起動に失敗するケース
autostartだと、何故か自動起動できないプログラムもあります。その場合は、他の方法を使うと起動できるケースもあります。
例えば、Sonic Piの場合は、私はautostartで起動できなかったので、以下の記事を参考にcrontabで自動起動をさせました。
Sonic Pi for standalone installations
/etc/init.d を使う方法
Raspbian Wheezyまではこちらを使うことが推奨されていました。Raspbian Jessieからはsystemdが推奨されているので、ここでは詳細の説明は省略します。
systemd を使う方法
Raspbian Jessieから推奨されている自動起動の方法です。サービスとして、起動したり、シャットダウンしたり、再起動したりもできるようになるので、真面目にプログラムをサービスとして管理したいならsystemdを使うのがよいです。
以下webiopi
を自動起動したいときの例を記載します。まず以下のようなwebiopi.service
というファイルを作成します。
[Unit]
Description=WebIOPI
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/usr/share/webiopi/htdocs
ExecStart=/usr/bin/python3 -m webiopi -l /var/log/webiopi -c /etc/webiopi/config
TimeoutStopSec=5
StandardOutput=null
[Install]
WantedBy = multi-user.target
基本的には、Description
にサービス名、WorkingDirectory
に作業ディレクリ名、ExecStart
に実行したいプログラムを記載すればよいです。他のオプションに関しては、systemdの仕様を調べて必要に応じて修正しましょう。
作成したwebiopi.service
は、/etc/systemd/system
以下に移動して読み込む必要があります。具体的には次のコマンドで移動と読み込みを行います。
$ sudo mv webiopi.service /etc/systemd/system/
$ sudo systemctl daemon-reload
続いて、以下のコマンドを実行すると、systemdを使ってサービスを起動することができます。
$ sudo systemctl start webiopi
サービスを停止したいときは以下コマンドを実行しましょう。
$ sudo systemctl stop webiopi
サービスの起動、停止が確認できたら、自動起動を設定しましょう。以下コマンドを実行します。
$ sudo systemctl enable webiopi
これで起動時にサービスが自動で起動するようになります。自動起動をやめたい場合は以下です。
$ sudo systemctl disable webiopi
まとめ
Raspberry Piで自動起動させる方法に関してまとめました。色々方法があるので用途によって使い分けましょう。それぞれ特徴がありますが、自分の中での選択の基準は以下です。
- 手軽にとにかく自動で起動させたいなら
/etc/rc.local
- ユーザー権限で実行させたいプログラムは
crontab @reboot
- GUIのプログラムは
autostart
- しっかり管理したいなら
systemd
- 特別な事情があれば
/etc/init.d
自動起動に関する記事
ラズパイの CUI で起動時に CLI アプリをフォアグラウンドで自動起動させて入力待ちにさせる
関連記事
変更履歴
- 2022/02/15 微修正
- 2020/01/26 Raspbian Buster以降でのautostartでの自動起動に関して追記