Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
70
Help us understand the problem. What is going on with this article?
@yosi-q

Raspbian jessieでSystemdを使った自動起動

More than 5 years have passed since last update.

Debian jessieでinitシステムがSystemdが採用されていますが、その流れでRaspbian JessieでもSystemdが使えるようになっていました。
ということで、自動起動の設定をしてみたいと思います。

serviceファイルの作成

下記のような「xx.service」ファイルを/etc/systemd/system配下におきます。
(下記の例では「moviestream.service」とします。)

moviestream.service
[Unit]
Description = Movie Streaming

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

[Install]
WantedBy=multi-user.target

※配置先は/usr/lib/systemd/system以下でもOKですが、システム設定のものが多いらしい。
ユーザ設定のものは/etc/systemd/system以下に置くのがお作法っぽい。

記載内容について、もう少し詳しく書いていきます。

Unit

systemdでは、管理単位を「Unit」と言います。
このセクションには下記のような、概要、依存関係、起動順について記載します。

  • 概要
    • Description: Unitの説明
  • 依存関係
    • Required: 前提条件となるUnitの指定。指定のUnitの起動に失敗すると、このUnitも起動しません。
    • Wants: 前提条件となるUnitの指定。ただし、Requiredと違って、指定のUnitの起動に失敗しても、このUnitの起動を試みます。
  • 順序
    • After: 記載したUnitの後に起動
    • Before: 記載したUnitの前に起動

Service

下記のようなサービスの制御について記述します。

  • ExecStart: サービス起動コマンド
  • ExecReload: サービスリロードコマンド
  • ExecStop: サービス停止コマンド
  • ExecStartPre/ExecStartPost: サービス起動前後の追加コマンド(サービス起動判定には関連させたくないコマンドを記載)
  • ExecStopPost: サービス停止後に実行するコマンド(サービスが異常停止した際にも実行される)
  • Type: サービスプロセスの起動完了の判定方法。デフォルトは「simple」。
    • 「simple」: ExecStartで指定したコマンドを実行した時点でサービスが立ち上がったと判断
    • 「oneshot」: ExecStartで指定したコマンドを実行し、それが完了した時点で起動完了(かつサービス終了)と判断
    • 「forking」: ExecStartで指定したコマンドからプロセスが一旦フォークし、親プロセス側が終了したときに、サービスが立ち上がったと判断
  • Restart: サービスプロセス停止時の再起動条件(デフォルトは「no」)
    • 「always」: 常に再起動を試みる
    • 「no」: 再起動しない
    • 「on-success」: 終了コード0の場合に再起動を試みる
    • 「on-failure」: 終了コード0外の場合に再起動を試みる

Install

このセクションを書かないとデーモンとして動いてくれません。

  • WantedBy: 有効時にこのUnitの.wantsディレクトリにリンクを作成する
  • RequiredBy: 有効時にこのUnitの.requiredディレクトリにリンクを作成する
  • Also: 有効化/無効化時に同時に有効化or無効化するUnit

Unitセクションで設定したWant/Required依存関係はWantedBy/RequiredByのディレクトリで判断されます。

Wants/Requiredはカスタマイズも可能ですが、いわゆるデーモンのrunレベルに合わせて設定するものが決まっています。

  • 「poweroff.target」: runレベル0相当
  • 「rescue.target」: runレベル1相当
  • 「multi-user.target」: runレベル2〜4相当
  • 「graphical.target」: runレベル5相当 + 「reboot.target」: runレベル6相当

登録確認

正しく設定できているか確認する。

# systemctl list-unit-files --type=service

UNIT FILE                              STATE   
(略)
moviestream.service                    disable  
(略)

なお、moviestreamと指定している部分は、前に作成した「xx.service」の「xx」の部分を指定します。(以下も同様です。)

上記の表示が確認できれば、うまくいっているはず。

サービスの起動確認

デーモン登録の前に、起動停止を確認する

# systemctl start moviestream (※起動時)
# systemctl stop moviestream (※停止時)

statusを指定すると、状況がみれます。下記は起動時。Activeの欄が確認ポイント。
```

systemctl status moviestream

● moviestream.service - Movie Streaming
Loaded: loaded (/etc/systemd/system/moviestream.service; enabled)
Active: active (running) since 日 2016-02-21 03:35:45 JST; 9h ago
Main PID: 543 (mjpgstreamer.sh)
CGroup: /system.slice/moviestream.service
├─543 /bin/bash /home/pi/systemd/mjpgstreamer.sh
└─562 /home/pi/mjpgstreamer/mjpg-streamer/mjpg-streamer-experiment...

2月 21 03:35:45 raspberrypi mjpgstreamer.sh[543]: o: www-folder-path...: /h...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: www-fo...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: HTTP T...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: userna...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: comman...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: starti...
2月 21 03:35:45 raspberrypi mjpg_streamer[562]: MJPG-streamer [562]: starti...
2月 21 03:35:45 raspberrypi mjpgstreamer.sh[543]: o: HTTP TCP port.....: 8081
2月 21 03:35:45 raspberrypi mjpgstreamer.sh[543]: o: username:password.: di...
2月 21 03:35:45 raspberrypi mjpgstreamer.sh[543]: o: commands..........: en...
Hint: Some lines were ellipsized, use -l to show in full.
```

デーモンとして動かすとき

# systemctl enable moviestream (※デーモン起動指定時)
# systemctl disable moviestream (※デーモン停止指定時)

参考

下記のサイトがとても参考になりました。
 
https://wiki.archlinuxjp.org/index.php/Systemd
http://equj65.net/tech/systemd-boot/

70
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yosi-q
インド資本の入った米国クラウドコンサルティングファームの東京オフィスに所属し、山形県鶴岡市からリモートワークしながら、ちょっとしたwonder探ししてます。 Qiitaは記録も含めてやったことをちょこちょこ残しています。 ここで記載した記事は私感や私自身の実施した内容の記録として記載しており、所属する組織とは関係ありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
70
Help us understand the problem. What is going on with this article?