スポンサーリンク

Raspberry Pi 3 systemdでpigpiodの自動起動

Linux
この記事は約6分で読めます。

※2018/1/13追記

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

 

※2018/2/27追記

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

 

はじめに

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

Raspberry Pi 3 pigpioを使ってLピカ
※2017/10/1 構成図一部修正、回路図追加 ※2017/11/21 一部画像リンク切れのため削除 やりたいこと 今回はRaspberry Pi 3(以降ラズパイ3)とpigpioを使ってLピカをやります。 Lピカとはた...

 

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

$ sudo pigpiod

 

pigpioのライブラリによると

http://abyz.co.uk/rpi/pigpio/pigpiod.html

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権限が必要ですが、その後、パイプとソケットコマンドは、通常のユーザーによって発行することができる。そうです。。

 

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

Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説(記事移動済み)
本記事は、以下に移動しました

 

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

 

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

init - もわの書斎

 

2018/02/27追記

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

systemdを本番運用してわかったこと - mixi engineer blog
こんにちは、運用部 アプリ運用グループの清水です。モンスト仲間募集中です。 以...

 

 

環境

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

debian_version 9.1

 

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

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

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

Systemdを使ってさくっと自作コマンドをサービス化してみる - Qiita
Systemdの仕組みをつかうと、自分で作ったコマンドを簡単にサービスとして登録することができます。 例として、hello worldを延々とファイルに書き込むコマンドをサービス化してみましょう。 1. コマンドを作る /op...

 

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

中身はこんな感じです。

[Unit]
Description = pigpio daemon

[Service]
ExecStart = /usr/bin/pigpiod
Restart = always
Type = forking

[Install]
WantedBy = multi-user.target

※注意点
[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を使っていきたいと思います。(小並感)

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

 

スポンサーリンク
Linuxラズパイ
スポンサーリンク
hakenをフォローする
定年まで泣くんじゃない
タイトルとURLをコピーしました