絖綛 N@i.jp  昨日:00044772
 今日:00041888
 総計:00094195
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:03/21 19:08


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

USBメモリでRAID 5を構築(番外編)

サービスの起動順を調整する


 ブート時に起動するサービスによっては、RAIDアレイが構成される前に起動してしまっては困るものがあります。また、RAIDアレイ配下にディレクトリやファイルを作成するように設定した、あるいは参照するように設定したことで、RAIDアレイが構成された後でなければ起動に失敗するようになったり、動作に問題が生じたりする場合もあります。

 このような問題を解消するには、従来のinit/Upstartであれば"/etc/rc?.d"配下にある"Snn","Knn"で始まる(nnは00〜99の数字)シンボリックファイル名のnnの値を大きくして起動順序を調整すれば良く、非常に直感的で容易な方法でした。
 ところが Raspbian Jessie になって、従来の init/Upstart の代わりに systemd が導入されました。systemd によって、ブート時のサービス起動を並列に行えるようになり、システム起動時間を大幅に短縮できるようになりました。その代償として、systemd は複雑な設定構文が大量にあるシステムになっており、正直理解するのは大変な物になっていると思います。サービスの起動順序を変更したいとき、従来の直感的な方法ではなく、サービスの依存関係や順序関係を定義しなければなりません。新しくサービスを追加したときに、依存関係なんか良く分からんから、一番後の方で起動すればいいや的なぶっちゃけ対処は、もう出来ないってことです。(やだなぁ・・・)
 systemd に対する賛否は多いのですが、それでも全体的には systemd を採用していく流れのようですね。

 と言うわけで、自分も systemd による起動順序の調整を行ってみました。具体的には Samba でして、RAIDをマウントした場所をファイル共有するように設定した場合には、RAID構成前に Samba サービスが起動してしまっては困るだろうと言うわけです。Samba や mdadm のサービス名は、Raspbian Jessie の場合、

# systemctl list-units | grep samba
  samba-ad-dc.service         loaded active exited    LSB: start Samba daemons for the AD DC
# systemctl list-units | grep "  md"
  mdadm-raid.service          loaded active exited    LSB: MD array assembly
  mdmonitor.service           loaded active running   MD array monitor

問題の Samba は"samba-ad-dc.service"という名前のようです。一般的には、このファイル名の設定ファイルが"/usr/lib/systemd"、または"/etc/systemd/system"配下にあり、そのファイル内に依存するサービス等の設定を追加します。通常、"/usr/lib/systemd"配下のファイルは変更せず、 "/etc/systemd/system"配下に設定ファイルを置き、こちらを修正するのが作法だそうです。
 しかし、"samba-ad-dc.service"という名前のファイルを探しても何処にもなく、"/etc/init.d/samba-ad-dc"スクリプトから systemd が自動生成したUNIT名だと思われます。このような場合は、以下の方法で設定を追加します。

  1. "/etc/systemd/system"ディレクトリ配下に"サービス名.service.d"という名前のディレクトリを作る
  2. 作成したディレクトリ配下に"xxxxx.conf"xxxxxは任意の名前)というファイルを置く
  3. "xxxxx.conf"ファイルに設定を追加する

systemd は"/etc/systemd/system"配下の設定を優先的に読み込み、そこに"サービス名.service.d/*.conf"があれば、サービスの設定として追加してくれるとのことです。
 具体的には、

# cd /etc/systemd/system
# mkdir samba-ad-dc.service.d
# cd samba-ad-dc.service.d
# vi requires.conf

として"requires.conf"を作成、編集します。内容は、

[Unit]
Requires=mdmonitor.service
After=mdmonitor.service
RequiresMountsFor=/media

としてみました。"samba-ad-dc"サービスが依存しているサービスは"mdmonitor"で、これとの起動順は"mdmonitor"サービスが起動した後(After)で、かつファイル共有する場所(今回の場合"/media")がマウントされるのを待ってから起動するという意味です。依存しているサービスの指定に"Requires="を使っているので、"mdmonitor"サービスの起動が失敗したら"samba-ad-dc"サービスは起動されません。(あぁ、この厳格な設定要求ったら、まるで某製品のようだ・・・)
 設定を反映させて、再起動。

# systemctl daemon-reload
# reboot

今のところ、これで問題はない様子です。


 ついでに、monitorix にも設定を追加してみました。monitorix も、Anything-sync-daemon と mdadm に依存しますよね。

# cd /etc/systemd/system
# mkdir monitorix.service.d
# cd monitorix.service.d
# vi requires.conf

設定内容は以下のとおり。

[Unit]
Requires=mdmonitor.service asd.service
After=mdmonitor.service asd.service
RequiresMountsFor=/media


< 過去の記事 [ 8月の Raspberry Pi リスト ] 新しい記事 >

2016 calendar
8月
123456
78910111213
14151617181920
21222324252627
28293031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.