3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi 3B+で起動時プログラム自動起動 systemdまとめ

Last updated at Posted at 2019-12-27

#Raspberry Piで起動時プログラム起動
Raspberry Piのプログラムを実行するのに、いちいちRaspberry Piのコマンドを開いて実行するのって不便ですよね。今回は起動時にsystemdというものを使って、プログラムを自動起動する方法を簡潔にまとめます。

#systemdについて
systemdはLinuxの起動処理やシステム管理を行う仕組みです。サービスを1つのシェルスクリプトではなくUnitという単位で、ファイルとして管理します。このため処理を細分化でき個別に実行することが可能です。また処理ごとの流れを明確にすることが出来るので、並行処理も可能です。今回は起動時のプログラムの実行の設定方法を扱いますが、起動時以外にも終了時やタイマーなどのトリガーでも実行が可能です。

#設定の流れ
設定の流れですが、基本的にはserviceファイルというものを作成して、serviceファイルを使える状態にすることで可能です。

##serviceファイル作成
serviceファイルは/etc/systemd/system/のディレクトリに作成してください。よって以下のコマンドを実行します。test.serviceのtestの部分は好きな名前で大丈夫です。

$ sudo nano /etc/systemd/system/test.service

中には以下のように記述します。

test.service
[Unit]
Description = do test

[Service]
ExecStart=/home/pi/systemd/test.sh
Restart=always
Type=simple
User=pi

[Install]
WantedBy=multi-user.target

[unit]
ユニット自体の定義をします。
Descriptionは動作に影響しないので、自分で決めてください。

[service]
ここで起動時のコマンドを決定します。RestartとTypeで設定すればサービスが停止した際の再起動などの設定もできます。また、Userで実行権限も設定できます。デフォルトではsudo権限で実行するのに加え、systemdには権限に応じたmoduleしか探しません。従って、user権限でpip installしたmoduleはno moduleと判定されてしまうので、sudo pip installするか、サービスファイルの権限の設定をpiに変えてください。

ExecStart: サービス起動コマンド
Type: サービスプロセスの起動完了の判定方法。デフォルトは「simple」。
「simple」: ExecStartで指定したコマンドを実行した時点でサービスが立ち上がったと判断
Restart: サービスプロセス停止時の再起動条件(デフォルトは「no」)
「always」: 常に再起動を試みる
User: 実行する権限(デフォルトは「root」)

[install]
このセクションは決まり文句として書いてください。
これがないと次の動作ができません。

#サービスファイルの再読み込み
サービスファイルが完成したら、デーモンに読み込みを行います。

$ systemctl daemon-reload

#サービスファイル動作確認

サービスファイルは以下のコマンドで起動停止が可能です。実行時は.seviceを抜いて自分の設定したサービスファイル名を入力してください。

$ systemctl start test(起動)
$ systemctl stop test (停止)

#serviceファイルを有効化する
動作の確認ができたら、以下のコマンドでサービスファイルを起動時に実行する(enable)するか、オフにするか(disable)にするかを決定します。

$ systemctl enable test  (デーモン起動)
$ systemctl disable test (デーモン停止)

#起動時の実行状況をコマンドで確認する
起動時に実行した場合、コマンド上に流れないのでエラーが起きていても確認ができません。起動後、このコマンドを実行すれば、起動時のプログラムの実行のログが確認できます。

sudo LANG=C systemctl status -l test.service

#参考にしたもの
今回は以下の記事を参考にしました。
https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9
https://qiita.com/molchiro/items/ee32a11b81fa1dc2fd8d
https://tomosoft.jp/design/?p=11697
https://qiita.com/marumen/items/e4c75a2617cb5d0113ce
https://www.souichi.club/technology/systemd/

#おわりに
今回でRaspberry Piで起動時の自動実行が可能になりました。自動実行ができれば、起動時にslackbotを起動させて、スマホからの操作も可能になります。より実用的にRaspberry Piを扱うことができそうです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?