SYSTEMDに入門してみた
@papi_tokei
第 146 回関西 Debian 勉強会
自己紹介
• 所属
• 京都のIT会社勤務(社会人2年目)
• 取り組んでいること
• AWSを使ったバックエンドの構築
• Vue.jsなどを使ったフロントエンド開発
• SORACOMのサービスを利用したIoT開
発
• Openblocksと戯れる日々…
なぜ今頃systemd?
弊社で使用しているOpenblocks EX1のファームのバージョンが
2系から3系に上がった際に、sysvinitからsystemdに変更されたので、
systemdの知識が必要になったからです。。。
OSが立ち上がるまで
電源ON⇒BIOSが起動⇒BIOSがブートローダー(GRUB)を起動
⇒ブートローダーがカーネルを起動
⇒カーネルがinitプロセス(sysvinit or systemd)を起動
⇒intiプロセス(PID1)が諸々のサービスを起動
Debianのinitプロセスは?
■ Debian squeeze(Debian 6)まではsysvinit
■ Debian wheezy(Debian 7)はsysvinit、ただしプレビューとして
systemdが利用可能
■ Debian jessie(Debian 8)以降はデフォルトsystemd、
ただしsysvinitも利用可能
Initプロセスを見てみる(sysvinit)
Lt debian 20190526
Initプロセスを見てみる(systemd)
Lt debian 20190526
systemdのメリット
■ これまでのinitプロセスでは以下の問題が発生していた
– シェルスクリプトを順番に実行していくので、
システムの起動に時間がかかる
– サービスごとにcgroupsでリソース配分を調整するなどの
仕組みがない
■ systemdでは?
– プロセスの起動を出来る限り並列で行おうとするので、
起動が早い
– Cgroupでプロセスの管理を行うので、リソース管理、
生存確認などが出来る
– リファレンスがめっちゃ丁寧に書かれている
sysvinitの
起動プロセス
sysvinitの
起動プロセス
/etc/init.d/rc
/etc/rc*.d以下のスクリプトを
順番に実行する
systemdの
起動プロセス
systemdのユニット
■ systemdはプロセスをユニットという単位で管理する
■ 全部で11個のユニットが存在する
– サービスユニット
– ターゲットユニット
– ソケットユニット
– …
サービスユニット
■ プロセスを制御・管理するための
ユニット
■ .serviceで終わるユニットファイル
■ 一般的なユースケースで
使用するユニットはほとんどこれ
ターゲットユニット
■ 複数のユニットをグルーピングする
ためのユニット
■ .targetで終わるユニットファイル
■ ユニット間の起動順序を
わかりやすくするために利用される
systemdの起動順序
■ ユニットの関係性は「依存」と「順序」の2つの考え方が存在
■ 依存
– プロセス同士が同時起動するかどうか
– あくまで、同時に起動するかどうかであり、
起動順序は考慮しない
■ 順序
– プロセス起動の順序関係を定義する
例えば、プロセスAがプロセスBを必要とする場合(依存)、
明示的に順序を指定しないと、プロセスAとBは同時に起動する
systemdの起動順序
■ まず、default.targetから依存関係、順序関係を構築
systemdではどんなプロセスが
起動するの?
■ sysvinitでは、/etc/rc*.d内のプロセスが起動する
■ systemdでは、以下のディレクトリのプロセスが起動対象
– /etc/systemd/system(ユーザーのコンフィグ)
– /lib/systemd/system(インストールパッケージのコンフィグ)
systemctlって?
■ systemdにあれこれと命令を出すことが出来るコマンド
– systemctl status … unitの状態を見ることが出来る
– systemctl edit … drop inという起動でunitファイルを編集
– systemctl show/cat … unitファイルを表示
– systemctl enable/disable … プロセスの自動起動を制御
– systemctl daemon-reload … unitファイルの変更を反映
– systemctl start/stop/restart … プロセスの起動制御
– systemctl list-unit-files --type=service … サービスの一覧を表示
実際にサービスを作ってみる
(自動起動)
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
現在の日時をsampleA.txtの出力するプロセス
multi-user.tagetの逆依存を指定
実際にサービスを作ってみる
(自動起動)
sampleA.service
sampleAの明示的な設定は2行だけだが、
後ろでいろいろな設定が勝手に付与される
実際にサービスを作ってみる
(依存あり)
自動起動の有効化
実際にサービスを作ってみる
(依存あり)
[Unit]
Requires=sampleB.service
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
sampleB.serviceへの依存を追加
sampleAには、sampleBが必要、
ということ
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleB.txt"
sampleB.service
実際にサービスを作ってみる
(依存あり)
sampleAからsampleBが呼び出されていることがわかる
また、依存のみなので、sampleAとsampleBは同時に起動している
実際にサービスを作ってみる
(順序あり)
[Unit]
Requires=sampleB.service
Before=sampleB.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
BeforeとType=oneshotを追加することで、
sampleAの後に、sampleBを起動することが出来る
実際にサービスを作ってみる
(順序あり)
sampleAの10秒後にsampleBが起動していることがわかる
おまけ
journalctlって?
■ systemd環境では、ログの収集はjournald(system-journald)が担当
■ journalctlはjournaldに対して命令を行う事ができるコマンド
■ Systemdのサービスのログを表示できるので、エラーの際は便利
graphical.targetの遷移を邪魔してみる
[Unit]
Before=sysinit.target
DefaultDependencies=no
OnFailure=emergency.target
[Service]
Type=oneshot
ExecStart=/bin/false
[Install]
RequiredBy=sysinit.target
sample.service
sysinit.targetが完了せず、次のターゲットに遷移せずに、
強制的にemergency.targetに遷移する
systemdの
起動プロセス
(再掲)
graphical.targetの遷移を邪魔してみる
[Unit]
Before=sysinit.target
DefaultDependencies=no
#OnFailure=emergency.target
[Service]
Type=oneshot
ExecStart=/bin/false
[Install]
RequiredBy=sysinit.target
sample.service
OnFailureをコメントアウトすると、正常にOSが起動しなくなる
(プロンプト受付をしなくなる)
もし、sysinit.targetよりも前のサービスを作成する場合は、
OnFailureを設定しておくと安心
ご清聴ありがとうございました

More Related Content

PDF
openSUSEの紹介とサーバ構築
PDF
Eucalyptus on OpenStack
PDF
SKKのススメ
PDF
サーバーでもデスクトップでもOK! YaSTを使ってLinuxをらくらく設定
PDF
AzureでopenSUSE Leap42.1が使えるよ!
PPTX
Inside wsl
PPTX
Packerで自動化
PDF
YaST を使って Linux をらくらく設定―Btrfs を活用したファイルサーバー構築 & OS インストールの自動化
openSUSEの紹介とサーバ構築
Eucalyptus on OpenStack
SKKのススメ
サーバーでもデスクトップでもOK! YaSTを使ってLinuxをらくらく設定
AzureでopenSUSE Leap42.1が使えるよ!
Inside wsl
Packerで自動化
YaST を使って Linux をらくらく設定―Btrfs を活用したファイルサーバー構築 & OS インストールの自動化

What's hot (20)

PDF
Open Build Serviceで楽をする
PDF
UEFIで始めるLinux From Scratch
PDF
AllwinnerタブレットのOSを作ってみる (途中版)
PDF
いまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LT
PDF
TUI作業で便利なソフト2題
PDF
Inside wsl
PDF
UEFI向け自作OSの紹介
PDF
CybozuのOSS(WalB)へコミットしてみた/使ってみた
PDF
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
PDF
第2回JAZUG総会 LT - FreeBSD on Azure
PDF
Ancient Unixes on emu (OSC2017 Shimane)
ODP
32bit UEFIマシンで遊ぶ
PDF
構成管理のアンチパターン
PDF
qpstudy05 lignhing talk - virtio
KEY
軽快なPlan 9 Update - Illumos KVM上陸 -
PDF
Xenとzfsで作る家庭内VDIサーバ
PDF
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
PDF
Bit visorsummit7material
PDF
全文検索くん(Search++)簡単導入の手引き
PPT
Zrouter
Open Build Serviceで楽をする
UEFIで始めるLinux From Scratch
AllwinnerタブレットのOSを作ってみる (途中版)
いまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LT
TUI作業で便利なソフト2題
Inside wsl
UEFI向け自作OSの紹介
CybozuのOSS(WalB)へコミットしてみた/使ってみた
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
第2回JAZUG総会 LT - FreeBSD on Azure
Ancient Unixes on emu (OSC2017 Shimane)
32bit UEFIマシンで遊ぶ
構成管理のアンチパターン
qpstudy05 lignhing talk - virtio
軽快なPlan 9 Update - Illumos KVM上陸 -
Xenとzfsで作る家庭内VDIサーバ
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
Bit visorsummit7material
全文検索くん(Search++)簡単導入の手引き
Zrouter
Ad

Similar to Lt debian 20190526 (6)

PDF
systemdを始めよう
PDF
Linux女子部 systemd徹底入門
PPTX
Systemd入門
PPTX
インフラエンジニアのお仕事 ~ daemontools から systemdに乗り換えた話 ~
PDF
systemdでよく使うサブコマンド
PPTX
Hello, systemd
systemdを始めよう
Linux女子部 systemd徹底入門
Systemd入門
インフラエンジニアのお仕事 ~ daemontools から systemdに乗り換えた話 ~
systemdでよく使うサブコマンド
Hello, systemd
Ad

More from hiroya akita (11)

PDF
KyotoLT_Online_27.pdf
PDF
はんなりPython #45
PDF
Python 3.10の新機能を 俯瞰してみる
PDF
KyotoLT(Online) 第26回
PDF
AppSync導入のすすめ
PDF
みんなのPython勉強会#62
PDF
はんなりpython#32
PPTX
Hannari python#27
PPTX
変数の重要度ってどうやったらわかるん?
PPTX
みんなのはんなりPython勉強会
PPTX
Pythonでも型をつけたいだけの人生だった
KyotoLT_Online_27.pdf
はんなりPython #45
Python 3.10の新機能を 俯瞰してみる
KyotoLT(Online) 第26回
AppSync導入のすすめ
みんなのPython勉強会#62
はんなりpython#32
Hannari python#27
変数の重要度ってどうやったらわかるん?
みんなのはんなりPython勉強会
Pythonでも型をつけたいだけの人生だった

Lt debian 20190526