Raspberry Pi 3 systemdでpigpiodの自動起動

スポンサーリンク

※2018/1/13追記

「3. UnitがServiceとして認識されているか確認」箇所のハイフン2つが文字化けしていたのを修正しました。大変申し訳ございませんでした。

※2018/2/27追記

参考サイトとsystemctl daemon-reloadを追記しました。

はじめに

前回pigpioを使ってLピカしました。

pigpioは便利だけどこのコマンドを毎回打たないといけないのは面倒です。

$ sudo pigpiod

pigpioのライブラリによると

pigpiod is a utility which launches the pigpio library as a daemon.
Once launched the pigpio library runs in the background accepting commands from the pipe and socket interfaces.
The pigpiod utility requires sudo privileges to launch the library but thereafter the pipe and socket commands may be issued by normal users.

pigpiodはデーモンとしてpigpioライブラリを起動するユーティリティで、
このライブラリを起動するためにsudo権限が必要ですが、その後、パイプとソケットコマンドは、通常のユーザーによって発行することができる。そうです。。

でもこのコマンドを毎度打つのは面倒くさいというより忘れてハマりそうなので、
自動起動にします。
ラズパイでのプログラム自動起動の方法はたくさんあるようです。

私はこの中ではcronくらいしか使ったことないです。(はい無能です)
そこで今回は今後使う機会が増えるであろうsystemdでの自動起動のやり方を、
勉強がてらメモしておこうと思います。

そもそもsystemdって何という方は色々調べてみてください。
個人的にこちらのサイトがわかりやすく面白かったです。

2018/02/27追記

改めてsystemdを勉強したときにこちらのサイト様が大変参考になりました。

環境

RASPBIAN STRETCH WITH DESKTOP 4.9(2017-09-07-raspbian-stretch.img)

debian_version 9.1

systemdを使ってのサービス登録

systemdとupstartの違いなどは難しくまだまだ勉強中です。。
でもそんな馬鹿な私でも簡単に自動起動させることができます。

サービス登録の流れはこちらを参考にさせていただきました。

0. そもそもsystemdが動いているか確認する

とりあえずsystemdがあるか確認します。

$ dpkg -S /sbin/init
systemd-sysv: /sbin/init

/sbin/initファイルをインストールしたパッケージを探します。
upstartではなくsystemdならOKです。

1. 必要なら登録するシェルを作っておく

本来なら自動起動させたいシェルなどを作成します。

でも今回はコマンドなのでシェルは作りません。

シェルの場合アクセス権付与を忘れずに。

2. Unit定義ファイルを作る

Unit定義ファイルというものを作ります。

例として作る場所は/etc/systemd/systemにしてます。

名前は分かりやすい名前にしましょう。

$ sudo vim /etc/systemd/system/pigpiod.service

中身はこんな感じです。

※注意点
[Service]のExecStart はコマンドのフルパスです。

whichコマンドでpigpiodコマンドのフルパスを調べれば出てきます。

$ which pigpiod
/usr/bin/pigpiod

[Service]のTyoeはforkingでうまく行きました。simpleだとダメでした・・・。

2018/02/27追記

Unitの設定ファイルを変更したら以下コマンドを実行しないとダメなようです。

$ systemctl daemon-reload

3. UnitがServiceとして認識されているか確認

以下のコマンドで確認します。

$ sudo systemctl list-unit-files --type=service | grep pigpiod
pigpiod.service disabled

この段階ではdisabledと表示されればOKです。

※2018/1/13追記

--type=serviceにあるハイフン2つの個所が文字化けしていたのを修正しました。

大変申し訳ございませんでした。

4. enabledにして自動起動させる。

Unitが認識されていればenableコマンドで自動起動させることが出来ます。

$ sudo systemctl enable pigpiod.service

※これでdisabledがenabledになるのでここで再起動でも動きだす。

5. おまけ

Unit登録されたあとだと以下コマンドで起動、停止ができます。

$ sudo systemctl start pigpiod.service
$ sudo systemctl stop pigpiod.service
$ sudo systemctl status pigpiod.service

最後に

思ってた以上に使いやすかったです。

これからはsystemdを使っていきたいと思います。(小並感)

でもこれホント便利です。

スポンサーリンク

シェアする

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

フォローする