Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説

2017/01/14 systemdに関して追記

Raspberry Piで自動起動する方法

 Raspberry Piにはプログラムを自動起動する方法がたくさんあります。それぞれ特徴があるので、自分が簡単と思う順にまとめていきます。自分もブートの仕組みちゃんと全部理解できていないので徐々にまとめていこうと思います。

 大きくは以下があるという認識です。

  • /etc/rc.local
  • autostart
  • crontab @reboot
  • /etc/init.d
  • systemd

/etc/rc.local

 /etc/rc.localというスクリプトが起動時に実行されます。以下のコマンドで編集します。

$ vim /etc/rc.local

ファイルの最後にexit 0とあるので、その手前に起動時に実行したいプログラムを書きます。hogehogeというプログラムだったら

hogehoge

exit 0

 といったように書きます。自作のスクリプト hogehoge.shみたいなものを使いたい場合は /usr/local/bin/hogehoge.shといったところに置いてやって以下のように書くのがよいかと思います。

hogehoge.sh

exit 0

 ちなみにここに書かれたプログラムはroot権限で走ります。

crontab @reboot

cronを使って起動時にプログラムを走らせることもできます。ユーザー権限でプログラムが実行されるので、root権限で走ったら困るようなプログラムに使えます。例えばROS(Robot Operating System)のプログラムとかはこれで起動するのがよいです。

 以下でcrontabを修正

$ crontab -e

 以下のように追記

@reboot                  /home/pi/hogehoge.sh

 これで起動時にhogehoge.shが実行されます。

autostart を使用する方法

 いわゆるWindowsのスタートアップにあたるものです。GUIのプログラムを起動時に実行したいときに使う、と思います。以下でautostartというファイルを作成します。

$ vim ~/.config/lxsession/LXDE-pi/autostart 

 中身は/home/pi/hogehoge.shを起動したい場合は、以下のように記載します。

@/home/pi/hogehoge.sh

/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/

 あとは以下コマンド実行すると、systemdを使ってサービスを起動することができます。

$ sudo systemctl start webiopi

 サービスを停止したいときは以下です。

$ sudo systemctl stop webiopi

 サービスの起動、停止が確認できたら、自動起動を設定しましょう。以下コマンドを実行します。

$ sudo systemctl enable webiopi

 これで起動時にサービスが自動で起動するようになります。自動起動をやめたい場合は以下です。

$ sudo systemctl disable webiopi

まとめ

 Raspberry Piで自動起動させたいと一口でいっても色々方法があることが分かりましたね。それぞれ特徴がありますが、自分の中での選択の基準は、手軽にとにかく自動で起動させたいなら /etc/rc.local。root権限で実行するとまずいプログラムは crontab @reboot。GUIのプログラムはautostart。しっかり管理したいならsystemd。何か/etc/init.dを使わないといけない事情がある場合は /etc/init.dといったところでしょうか。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル(大)広告

コメント

  1. […] ここまで出来たら一度再起動して、先ほどと同様にAmaon Dashのボタンに対して反応があればOKです。おつかれさまでした。ちなみに、今回は二種類の方法でRaspberry Pi起動時のプログラム実行を行っていますが、このあたりのことを詳しく知りたい方は、こちらの方の記事が参考になると思います。 […]