SlideShare a Scribd company logo
1 of 50
Download to read offline
Linux女子部 systemd徹底入門!
1
ver1.5 中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
Linux女子部
systemd徹底入門!
Open Cloud Campus
2
Linux女子部 systemd徹底入門!
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
「Linux独習書の新定番」
書きました!
読者の声より ――
「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく 
 なっているのは不幸なことだと思う。そんな中、この本はすごくいい」
「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。
 脳みそに染みこんで来ます」
Open Cloud Campus
3
Linux女子部 systemd徹底入門!
Contents
 SysVinit & Upstartの復習
 systemdによるシステム起動処理
 systemdの操作方法
 journaldによるログ管理
 Unit設定ファイルの書き方
 知っておくと便利な機能
 参考資料
(*) 本資料の説明はFedora 19を前提としています。
Linux女子部 systemd徹底入門!
4
SysVinit & Upstartの復習
Open Cloud Campus
5
Linux女子部 systemd徹底入門!
Linuxの起動プロセス (1)
 「システムBIOS」が起動ディスクからブートローダ(GRUB)をメモリに読み込んで実行。
 GRUBは起動カーネル選択画面を表示して、指定されたカーネルと初期ラムディスクをメモ
リに読み込んだ後に、カーネルを実行。
 カーネルは、初期ラムディスクの内容をメモリ上のラムディスク領域に展開して、「initス
クリプト」を実行。
– 初期ラムディスクには、ルートファイルシステムへのアクセスに必要なデバイスドライバと「init
スクリプト」が含まれます。
ブートローダ (GRUB)
/bootファイルシステム
② ブートローダが
  読み込み
③ ラムディスク領域
  に展開
起動ディスク物理メモリ
Linuxカーネル
初期ラムディスク
Linuxカーネル
初期ラムディスク
ラムディスク領域
・デバイスドライバ
・initスクリプト
・その他コマンド類
① システムBIOSから起動
Open Cloud Campus
6
Linux女子部 systemd徹底入門!
Linuxの起動プロセス (2)
 「initスクリプト」は、必要なデバイスドライバを読み込んで、ルートファイルシステムを
マウントした後に、最初のプロセスとなる「/sbin/init」を実行。
– 正確には、execコマンドにより、initスクリプトのプロセスが/sbin/initに置き換えられます。
 ここで実行される「/sbin/init」が、これまでのSysVinit / Upstartの本体です。systemd
では、ここで実行されるものが「/usr/bin/systemd」に変わります。
※ 初期RAMディスクはcpio+gzipアーカイブファイルなのでpaxコマンドで展開可能です。
– # pax -rzf /boot/initramfs-2.6.32-131.0.15.el6.x86_64.img
#!/bin/sh
#
# Licensed under the GPLv2
#
# Copyright 2008-2009, Red Hat, Inc.
# Harald Hoyer <harald@redhat.com>
# Jeremy Katz <katzj@redhat.com>
(中略)
# start up udev and trigger cold plugs
udevd --daemon –resolve-names=never
(中略)
exec switch_root "$NEWROOT" "$INIT" $initargs || {
warn "Something went very badly wrong in the initramfs. Please "
warn "file a bug against dracut."
emergency_shell
}
fi
udevで必要なドライバをロード
execで/sbin/initに実行を切り替え
RHEL6のinitスクリプトの例
Open Cloud Campus
7
Linux女子部 systemd徹底入門!
SysVinitの動作
 SysVinit / Upstartは、ユーザレベルのサーバ初期設定やサービス起動処理を行います。
 RHEL5の「/sbin/init」(SysVinit)は、設定ファイル「/etc/inittab」にしたがって次の
処理を行います。
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
(中略)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
RHEL5の/etc/inittabの例
– 初期設定スクリプト「/etc/rc.d/rc.sysinit」を実行して、ファ
イルシステムのfsckチェックとマウント処理、その他、もろも
ろのシステム初期化を実施します。
– スクリプト「/etc/rc.d/rc」を実行して、起動時のランレベルに
応じたサービスを起動します。
• 実際の起動処理は、/etc/init.d/以下のサービス個別のスク
リプトから実施します。
– コンソールログインの受付プロセス(mingetty)を起動します。
– ランレベル5の場合は、GUIのログイン画面を起動します。
mingetty
prefdm
rc.sysinit
システム初期化 サービス起動 ログイン受付
rc
# /etc/init.d/<service名> start
Open Cloud Campus
8
Linux女子部 systemd徹底入門!
Upstartの動作
 RHEL6の「/sbin/init」はUpstartと呼ばれるイベントベースのジョブ管理システムに変更
されています。
– 「/etc/inittab」はデフォルトのランレベル設定のみが記載されます。「/etc/init/」以下のジョブ
設定ファイルに従って、起動時に各種ジョブが実行されます。
 ただし、実際にジョブとして実行される内容は、RHEL5とほぼ同じです。
"rcS"ジョブ起動
rc.sysinit
telinit $runlevel
"startup"イベント発行
/etc/init/rcS.conf
"runlevel X"イベント発行
/etc/init/rc.conf
"stopped rc"イベント発行
"start-ttys"ジョブ起動
initctl start tty TTY=$tty
/etc/init/start-ttys.conf
"prefdm"ジョブ起動
/etc/X11/prefdm -nodaemon
/etc/init/prefdm.conf
RUNLEVEL=5の場合
"tty"ジョブ起動
/sbin/mingetty TTY
"rc"ジョブ起動
/etc/rc.d/rc $RUNLEVEL
/etc/init/tty.conf
/sbin/init起動
Open Cloud Campus
9
Linux女子部 systemd徹底入門!
サービス起動スクリプトの仕様
 サービス起動スクリプト「/etc/init.d/<service名>」は、最低限、次の3つのオプションを
受け付る必要があります。
– start : サービスを開始
– stop : サービスを停止
– status : サービスの起動状態を返り値で応答
 中身はただのシェルスクリプトのため、独自のオプションを受け付けたり、サービス
(デーモン)起動以外の目的で利用されるものなどもあります。
– PosgreSQLのデータベースクラスタ初期化(独自オプションの利用)
• # service postgresql initdb
– 初回起動時の設定ウィザードの実行(サービス起動するわけではない)
• # service firstboot start
Open Cloud Campus
10
Linux女子部 systemd徹底入門!
systemdが目指したもの
 システム起動時間を短縮
– シェルスクリプトはシリアルに実行されるので効率が悪かった。シェルスクリプト内の処理を個別
に分割して、並列実行すれば、起動時間が短縮できる。
 システム構成の動的変更に対応
– システム起動時だけではなく、システム構成の変更に応じて、動的に必要なサービスの起動・停止
を行いたい。
 プロセス停止処理を標準機能として提供
– これまで、プロセスの停止処理は、サービススクリプト内で個別に実装されており、PIDファイルや
プロセス名などを用いていた。systemd自身に、フォークしたデーモンプロセスをトラッキングし
て、停止する機能を実装したい。
 デーモンの実行環境を制御
– サービスごとに関連するデーモンの実行環境(Cgroupsによるリソース割り当てやアクセス可能な
ディレクトリなど)を設定できるようにしたい。各デーモンのログ出力もまとめて管理したい。
http://0pointer.de/blog/projects/systemd.html
Linux女子部 systemd徹底入門!
11
systemdによるシステム起動処理
Open Cloud Campus
12
Linux女子部 systemd徹底入門!
systemdの最小処理単位 ー Unit
 SysVinitの初期化スクリプトにまとめて含まれていた個々の処理を抜き出して、個別の
「Unit」として定義します。
rc.sysinit rc
systemd-remount-fs.service
systemd-udevd.service
・・・ chronyd.service
crond.service
dbus.service
irqbalance.service
mdmonitor.service
NetworkManager.service
rngd.service
rpcbind.service
rsyslog.service
sshd.service
・・・
console-getty.service
systemd-logind.service
dev-hugepages.mount
proc-sys-fs-binfmt_misc.mount
tmp.mount
・・・
mingetty
prefdm
# /etc/init.d/<service名> start
sys-devices-pci00...0:00:03.0-virtio0-net-eth0.device
sys-devices-pci00...4.0-virtio1-block-vda-vda1.device
sys-devices-pci00...4.0-virtio1-block-vda-vda2.device
sys-devices-pci00...:00:04.0-virtio1-block-vda.device
dev-dmx2d1.swap
・・・
これら全てが
「Unit」
Open Cloud Campus
13
Linux女子部 systemd徹底入門!
Unitの種類
 Unitはいくつかのタイプに分かれており、拡張子で識別されます。主要なUnitには次のよ
うなものがあります。
– .service:サービス
• 有効化すると対応するデーモンが起動する。
– .target:何もしない
• 後述の依存関係・順序関係を定義する際に、複数のUnitをグループ化するために使用する。
– .mount:マウントポイント
• 有効化するとマウントされる。
– .swap:Swap領域
• 有効化するとSwap領域が有効になる。
– .device:デバイス
• udevがデバイスを認識すると有効化される。
– .socket : ソケット
• systemdが特定のソケットをListenする。接続があると、指定のデーモンを起動してソケット
を受け渡す(従来のxinetdのような機能)
 Unitには、明示的に設定するものと、自動的に作成されるものがあります。
– .serviceと.targetは、設定ファイルで明示的に定義します。
– .mountと.swapは、/etc/fstabから自動作成されます。
– .deviceは、udevによって自動作成されます。
Open Cloud Campus
14
Linux女子部 systemd徹底入門!
Unit定義ファイルの場所
 Unitの定義ファイルは、次の2箇所にあります。
– /etc/systemd/system/以下:管理者がカスタマイズする内容
– /usr/lib/systemd/system/以下:システムデフォルトの設定
 両方に同じ名前の設定ファイルがある場合は、/etc/systemd/systemが優先されます。
– システムデフォルトの設定を変更する際は、/usr/lib/systemd/systemから/etc/systemd/systemに
設定ファイルをコピーして、これを編集します。
 Unit名がそのまま設定ファイル名になります。
– シンボリックリンクでUnitの別名を設定することができます。
– ディレクトリ「<Unit名>.wants」は、後述の依存関係の定義に使用します。
basic.target.wants
dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service
dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service
dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
default.target -> /lib/systemd/system/multi-user.target
default.target.wants
getty.target.wants
multi-user.target.wants
sockets.target.wants
sysinit.target.wants
syslog.service -> /usr/lib/systemd/system/rsyslog.service
system-update.target.want
/etc/systemd/system内にある設定ファイルの例
Open Cloud Campus
15
Linux女子部 systemd徹底入門!
Unitの依存関係と順序関係
 Unit間には「依存関係」と「順序関係」が定義されます。
– 依存関係は、「AというUnitを有効化するなら、BというUnitも有効化するべき」という関係
– 順序関係は、「AというUnitを有効化する前に、BというUnitを有効化するべき」という関係
 systemdが起動すると、「default.target」というUnitが有効化されます。これにより、
「default.target」に依存するUnitがまとめて有効化されます。
– default.targetの実体は、「multi-user.target」「graphical.target」などへのシンボリックリンク
です。リンク先を変えることが、「デフォルトrunlevelの変更」に相当します。
– 下図のように、主には、targetタイプのUnitで依存関係の骨組みを作って、その下にその他のタイ
プのUnit群をまとめて依存させます。(例外もあります。)
default.target multi-user.target basic.target
NetworkManager.service
avahi-daemon.service
irqbalance.service
remote-fs.target
rsyslog.service
・・・
シンボリックリンク
fedora-autorelabel-mark.service
fedora-autorelabel.service
fedora-configure.service
fedora-loadmodules.service
sys-kernel-config.mount
sys-kernel-debug.mount
systemd-journald.service
systemd-modules-load.service
systemd-random-seed-load.service
systemd-sysctl.service
systemd-udev-trigger.service
systemd-udevd.service
・・・
sysinit.target
Open Cloud Campus
16
Linux女子部 systemd徹底入門!
主要な依存関係の整理
multi-user.target
シンボリックリンク
graphical.target
rescue.target
runlevel 1で
起動するサービス
runlevel 3で
起動するサービス
runlevel 5で
起動するサービス
basic.target
default.target
sysinit.target
runlevelに依存せず
起動するサービス
runlevelに依存せず
起動するサービス
従来のrc.sysinitで
行っていた処理
シンボリックリンク
を切り替える
local-fs.target
swap.target
swap領域の有効化
ファイルシステムの
マウント処理
Open Cloud Campus
17
Linux女子部 systemd徹底入門!
依存関係と順序関係の設定 (1)
 systemdが起動すると、Unit間の「依存関係」を元に、全体として有効化されるUnit群を
決定します。
– ただし、それぞれのUnitを起動する「順序関係」は、これとはまったく独立に定義されます。
– systemdは、順序関係を持たないUnitについては、できるかぎり並列に起動処理を実施します。こ
れにより、起動処理の並列度を高めて、システム起動時間を短縮します。
 依存関係は、次のいずれかの方法で設定します。
– Unit設定ファイルの[Unit]セクションにおいて、「Wants=」オプション、もしくは、
「Requires=」オプションで、前提となる(一緒に有効化する)Unitを指定する。
– ディレクトリ「<Unit名>.wants」「<Unit名>.requires」内に、前提となる(一緒に有効化する)
Unitの設定ファイルへのシンボリックリンクを作成する。
– 「Requires」は、前提Unitが起動に失敗すると、このUnitの起動を取りやめます。「Wants」は、
前提Unitが起動に失敗しても、このUnitの起動処理を行います。
– その他に「Conflicts=」オプションで、同時に有効化してはいけないUnitの指定ができます。
Open Cloud Campus
18
Linux女子部 systemd徹底入門!
依存関係と順序関係の設定 (2)
 「<Unit名>.wants」ディレクトリは、サービ
スの自動起動を設定する際に利用されます。
– systemctlコマンドでサービスの自動起動を設定
すると、「WantedBy=」で指定されたUnitの
「.wants」ディレクトリに、設定ファイルへのシ
ンボリックリンクが作成されます。
# systemctl disable sshd.service
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'
# systemctl enable sshd.service
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'
# ls -l /etc/systemd/system/multi-user.target.wants/
合計 0
lrwxrwxrwx. 1 root root 46 10月 30 12:35 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 35 10月 30 12:36 atd.service -> /usr/lib/systemd/system/atd.service
lrwxrwxrwx. 1 root root 38 10月 30 12:36 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 44 10月 30 12:35 avahi-daemon.service -> /usr/lib/systemd/system/avahi-daemon.service
lrwxrwxrwx. 1 root root 39 10月 30 12:36 chronyd.service -> /usr/lib/systemd/system/chronyd.service
・・・
lrwxrwxrwx. 1 root root 36 11月 2 21:35 sshd.service -> /usr/lib/systemd/system/sshd.service
sshd.serviceの自動起動を解除・設定する例
[Unit]
Description=OpenSSH server daemon
After=syslog.target network.target auditd.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStartPre=/usr/sbin/sshd-keygen
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
/usr/lib/systemd/system/sshd.service
Open Cloud Campus
19
Linux女子部 systemd徹底入門!
依存関係と順序関係の設定 (2)
 順序関係は、次の方法で設定します。
– Unit設定ファイルの[Unit]セクションにおいて、「After=」オプションと「Before=」オプション
で指定します。
– 「After=A B C」:自分自身は、Unit「A」「B」「C」の後に起動する。
– 「Before=A B C」:自分自身は、Unit「A」「B」「C」の前に起動する。
 Unit起動時の「待ち合わせ」ポイントとして、targetタイプのUnitを利用します。
– 例えば、「network.target」は、ネットワーク環境を準備するUnitと、ネットワーク環
境を使用するUnitの待ち合わせに使用します。
network.target
ネットワーク環境を
準備するUnit
ネットワーク環境を
使用するUnit
Before=network.targetAfter=network.target
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before=NetworkManager.service
・・・
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
・・・
/usr/lib/systemd/system/firewalld.service/usr/lib/systemd/system/httpd.service
Firewallの構成が終わってから
httpdが起動することが保証される
Firewallの構成が終わってから
httpdが起動することが保証される
Open Cloud Campus
20
Linux女子部 systemd徹底入門!
依存関係と順序関係の設定 (3)
 現在有効なUnitの依存関係、順序関係は次のコマンド確認できます。
– # systemctl list-dependencies <Unit名>
• 指定Unitが必要とするUnitを表示します。(指定省略時は「default.target」)
• 依存Unitがtargetタイプの際は、さらに、それが必要なUnitを再帰表示します。
• --allオプションをつけると、すべてのUnitを再帰表示します。
– # systemctl list-dependencies <Unit名> --after
• 指定Unitより先に起動するUnitをツリー表示します。
• --allオプションは上と同様。
– # systemctl list-dependencies <Unit名> --before
• 指定Unitより後に起動するUnitをツリー表示します。
• --allオプションは上と同様。
# systemctl list-dependencies
default.target
├─atd.service
├─auditd.service
・・・
├─basic.target
│ ├─fedora-autorelabel-mark.service
・・・
│ ├─firewalld.service
│ ├─paths.target
│ ├─sockets.target
│ │ ├─avahi-daemon.socket
│ │ ├─dbus.socket
・・・
│ ├─sysinit.target
│ │ ├─dev-hugepages.mount
│ │ ├─dev-mqueue.mount
│ │ ├─lvm2-monitor.service
│ │ ├─plymouth-read-write.service
│ │ ├─plymouth-start.service
・・・
├─getty.target
│ └─getty@tty1.service
└─remote-fs.target
Open Cloud Campus
21
Linux女子部 systemd徹底入門!
動的生成Unitについて (1)
 /usr/lib/systemd/system-generators/以下のgenerator群は、システム環境に応じて、動的
なUnitの生成や、既存Unitの設定変更を行います。
– 例:
– systemd-cryptsetup-generator
• /etc/crypttabを参照して、systemd-cryptsetup@.serviceを生成します。
– systemd-fstab-generator
• /etc/fstabを参照して、mountタイプとswapタイプのUnitを生成します。
• mountタイプは、マウントポイントのパスで「/」を「-」に置換したものがUnit名になります。
– systemd-rc-local-generator
• /etc/rc.d/rc.localが実行可能ファイルの場合に、rc-local.serviceの自動起動を有効化します。
 動的に生成されたUnitの設定ファイルは、/run/systemd/generator/以下に配置されます。
# ls /run/systemd/generator/
-.mount
boot.mount
dev-disk-byx2duuid-89cd76bex2d8d59x2d441cx2d9165x2dfe8ff338266b.device.wants
dev-mapper-fedorax2dswap.device.wants
dev-mapper-fedorax2dswap.swap
local-fs.target.requires
swap.target.wants
Open Cloud Campus
22
Linux女子部 systemd徹底入門!
動的生成Unitについて (2)
 udevがデバイスを認識した際に「systemd」というudevタグをつけると、対応するdevice
タイプのUnitが有効化されます。
– 該当デバイスの/sysファイルシステムのパスで「/」を「-」に置換したものがUnit名になります。
 Bluetoothコントローラ、プリンタ、スマートカード、サウンドカードに対応するデバイス
は、それぞれ、bluetooth.target, printer.target, smartcard.target, sound.targetが、自
動的に前提のUnitになります。
– たとえば、サウンドカードを必要とするUnitをsound.targetの前提Unitとしておけば、サウンド
カードを接続したタイミングで、このUnitが動的に有効化されます。
# systemctl list-units --type=device --full
UNIT LOAD ACTIVE SUB DESCR
sys-devices-pci0000:00-0000:00:01.1-ata2-host1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged QEMU_
sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virti
sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda-vda1.device loaded active plugged /sys/
sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda-vda2.device loaded active plugged /sys/
sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda.device loaded active plugged /sys/
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/
sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/
sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/
sys-devices-pnp0-00:04-tty-ttyS0.device loaded active plugged /sys/
sys-devices-virtual-block-dmx2d0.device loaded active plugged /sys/
sys-devices-virtual-block-dmx2d1.device loaded active plugged /sys/
sys-module-configfs.device loaded active plugged /sys/
sys-subsystem-net-devices-eth0.device loaded active plugged Virti
Linux女子部 systemd徹底入門!
23
systemdの操作方法
Open Cloud Campus
24
Linux女子部 systemd徹底入門!
Unitの一覧表示 (1)
 # systemctl list-unit-files
– 定義されているすべてのUnitとその状態(下表)を一覧表示します。
– --typeオプションで特定タイプのUnitのみを表示します。
Status 説明
enabled 「WantedBy=」指定あり。
自動起動が有効。
disabled 「WantedBy=」指定あり。
自動起動が無効。
static 「WantedBy=」指定なし。
# systemctl list-unit-files --type=service
UNIT FILE STATE
arp-ethers.service disabled
atd.service enabled
auditd.service enabled
autovt@.service disabled
avahi-daemon.service enabled
blk-availability.service disabled
chrony-wait.service disabled
chronyd.service enabled
console-getty.service disabled
console-shell.service disabled
crond.service enabled
dbus-org.fedoraproject.FirewallD1.service enabled
dbus-org.freedesktop.Avahi.service enabled
dbus-org.freedesktop.hostname1.service static
dbus-org.freedesktop.locale1.service static
dbus-org.freedesktop.login1.service static
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.timedate1.service static
dbus.service static
・・・
従来の「chkconfig --list」に相当
systemctlコマンドで自動起動の
有効・無効を変更可能なUnit
Open Cloud Campus
25
Linux女子部 systemd徹底入門!
Unitの一覧表示 (2)
 # systemctl list-units (「list-units」は省略可)
– 現在有効な(有効であるべき)Unitとその状態を一覧表示します。
– --typeオプションで特定タイプのUnitのみを表示します。
# systemctl --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
fedora-readonly.service loaded active exited Configure read-only root supp
firewalld.service loaded active running firewalld - dynamic firewall
getty@tty1.service loaded active running Getty on tty1
irqbalance.service loaded active running irqbalance daemon
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, s
mcelog.service loaded active running Machine Check Exception Loggi
NetworkManager.service loaded active running Network Manager
polkit.service loaded active running Authorization Manager
rngd.service loaded failed failed Hardware RNG Entropy Gatherer
rpcbind.service loaded active running RPC bind service
・・・
systemd-v...le-setup.service loaded active exited Setup Virtual Console
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
31 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
Open Cloud Campus
26
Linux女子部 systemd徹底入門!
Unitの基本操作 (1)
 # systemctl enable/disable <Unit名>
– Unitの自動起動を有効化/無効化します。
– 実際には、「WantedBy=」で指定されたUnitへの依存関係を設定/削除します。
 # systemctl start/stop/restart <Unit名>
– 指定のUnitをその場で、起動/停止/再起動します。
– reloadコマンドは、Unit設定ファイルでreloadの動作が定義されている場合のみ使用できます。
 # systemctl status <Unit名>
– Unitの実行状態を表示します。
# systemctl status httpd.service
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
Active: active (running) since 日 2013-11-03 15:59:37 JST; 16s ago
Main PID: 4621 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: name=systemd:/system/httpd.service
├─4621 /usr/sbin/httpd -DFOREGROUND
├─4622 /usr/sbin/httpd -DFOREGROUND
├─4623 /usr/sbin/httpd -DFOREGROUND
├─4624 /usr/sbin/httpd -DFOREGROUND
├─4625 /usr/sbin/httpd -DFOREGROUND
└─4626 /usr/sbin/httpd -DFOREGROUND
11月 03 15:59:36 fedora19 systemd[1]: Starting The Apache HTTP Server...
11月 03 15:59:36 fedora19 httpd[4621]: AH00557: httpd: apr_sockaddr_info_ge...9
11月 03 15:59:36 fedora19 httpd[4621]: AH00558: httpd: Could not reliably d...e
11月 03 15:59:37 fedora19 systemd[1]: Started The Apache HTTP Server.
関連する直近のログを表示
関連するデーモンプロセスを表示
Open Cloud Campus
27
Linux女子部 systemd徹底入門!
Unitの基本操作 (2)
 # systemctl daemon-reload
– Unitの設定ファイルを変更した際に、変更内容をsystemdに認識させます。
 chkconfigコマンド/serviceコマンドは、対応するsystemctlコマンドに変換されます。
 サービス起動スクリプトで標準外のオプションを使用していたものは、systemd環境では使
用できなくなります。
– 例えば、PostgreSQLデータベースクラスタ初期化は、postgresql-setupコマンドを使用します。
• RHEL6: # service postgresql initdb
• Fedora19: # postgresql-setup initdb
# chkconfig sshd off
情報:'systemctl disable sshd.service'へ転送しています。
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'
# chkconfig sshd on
情報:'systemctl enable sshd.service'へ転送しています。
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'
# service sshd stop
Redirecting to /bin/systemctl stop sshd.service
# service sshd start
Redirecting to /bin/systemctl start sshd.service
Open Cloud Campus
28
Linux女子部 systemd徹底入門!
Cgroupsの確認
 systemdは、Cgroupsを利用して、Unitごとに関連するプロセスを分類します。
– # systemd-cgls : Cgroupsによる分類をツリー表示
– # systemd-cgtop : グループごとのリソース使用状況をリアルタイムで表示
# systemd-cgls
├─system
│ ├─1 /usr/lib/systemd/systemd --system --deserialize 17
│ ├─httpd.service
│ │ ├─4621 /usr/sbin/httpd -DFOREGROUND
│ │ ├─4622 /usr/sbin/httpd -DFOREGROUND
│ │ ├─4623 /usr/sbin/httpd -DFOREGROUND
│ │ ├─4624 /usr/sbin/httpd -DFOREGROUND
│ │ ├─4625 /usr/sbin/httpd -DFOREGROUND
│ │ └─4626 /usr/sbin/httpd -DFOREGROUND
│ ├─sm-client.service
│ │ └─560 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
│ ├─sendmail.service
│ │ └─495 sendmail: accepting connections
│ ├─rpcbind.service
│ │ └─461 /sbin/rpcbind -w
│ ├─sshd.service
│ │ └─4440 /usr/sbin/sshd -D
・・・
│ └─systemd-journald.service
│ └─285 /usr/lib/systemd/systemd-journald
└─user
└─0.user
├─108.session
│ ├─4521 sshd: root@pts/1
│ ├─4525 -bash
│ ├─4654 systemd-cgls
│ └─4655 cat
この下に、systemdから起動する
Unitごとのサブグループを作成
この下に、ユーザアカウントごとの
サブグループを作成。
Open Cloud Campus
29
Linux女子部 systemd徹底入門!
プロセスグループへのシグナル送信
 Cgroupsの同じグループに属するプロセスにまとめてシグナルを送信することができます。
– 例:
– # systemctl kill -s9 sshd.service
• sshd.serviceのグループに属するプロセスにKILLシグナル(シグナル番号9)を送信します。
– これにより、サービスに関連するプロセスを漏れなく停止することができます。
– 「--kill-who=main」オプションをつけると、グループ内で最初に起動したメインプロセスのみに
シグナルを送ります。
 「systemctl stop」でUnitを停止する際にも利用されます。
– Unit定義ファイル内の「ExecStop=」で指定されたコマンドを実行して、それでも該当Unitのグ
ループにプロセスが残っている場合は、これらにまとめて、「SIGTERM」、それでも残っていれば
「SIGKILL」を送ります。
Linux女子部 systemd徹底入門!
30
journaldによるログ管理
Open Cloud Campus
31
Linux女子部 systemd徹底入門!
systemdのログ管理機能
 systemdは、Unitとして起動したデーモンプロセスの標準出力、および、rsyslogdへの出力
内容を独自のロギングサービス(systemd-journald.service:通称「journald」)に送りま
す。
– journaldは、出力内容にメタ情報を追加して、/var/log/journal/以下に記録します。
– journaldのログファイルはバイナリ形式のため、そのまま参照することはできません。journalctl
コマンドで検索・表示します。
 systemdの環境では、rsyslogdの設定変更が必要です。
– これまで、プロセスが出力するシステムログは、Unixソケット「/dev/log」を経由してrsyslogdに
送られていました。systemdは「/dev/log」からログを横取りした後、同じログをUnixソケット
「/run/systemd/journal/syslog」から再出力します。rsyslogdは、これからログを受け取るように
設定します。
rsyslogd
/dev/log
プロセス
/dev/log
プロセス
rsyslogd
/run/systemd/journal/syslog
systemd
$SystemLogSocketName /run/systemd/journal/syslog
/etc/rsyslog.d/listen.conf
従来のシステムログの流れ
systemd環境での
システムログの流れ
Open Cloud Campus
32
Linux女子部 systemd徹底入門!
imjournalモジュールについて
 最近のrsyslogdには、journaldのデータベースから直接にログ情報を取得するモジュール
「imjournal」が用意されており、Unixソケット「/run/systemd/journal/syslog」の代わ
りに、こちらを利用することも可能です。
– RHEL7では、デフォルトでimjournalが使用されています。
– imjournalの詳細は下記を参照
• http://www.rsyslog.com/doc/imjournal.html
Open Cloud Campus
33
Linux女子部 systemd徹底入門!
journaldのログ検索
 journalctlコマンドの主要なオプションは次のとおりです。
– -u <Unit名> : 指定Unitに関係するログのみを表示
– --since="YYYY-MM-DD hh:mm:ss" : この日時以降のログを表示
– --until="YYYY-MM-DD hh:mm:ss" : この日時までのログを表示
– -b : 直前のサーバ起動以降のログを表示
– -f : 「tail -f」のように新規のログを待って、順次表示する
– --no-pager: lessコマンドを使用しない
– -a : 長いメッセージを省略しない
# journalctl -u sshd.service -b --no-pager -a
-- Logs begin at 水 2013-10-30 12:40:32 JST, end at 日 2013-11-03 20:08:04 JST. --
・・・
11月 03 15:49:25 fedora19 systemd[1]: Starting OpenSSH server daemon...
11月 03 15:49:25 fedora19 systemd[1]: Started OpenSSH server daemon.
11月 03 15:49:25 fedora19 sshd[4440]: Server listening on 0.0.0.0 port 22.
11月 03 15:49:25 fedora19 sshd[4440]: Server listening on :: port 22.
11月 03 15:56:39 fedora19 sshd[4461]: Accepted password for root from ::1 port 51491 ssh2
11月 03 15:57:23 fedora19 sshd[4495]: Accepted password for root from 192.168.122.1 port 33665 ssh2
11月 03 15:57:26 fedora19 sshd[4521]: Accepted password for root from ::1 port 51492 ssh2
11月 03 16:06:28 fedora19 sshd[4660]: Accepted password for root from 192.168.122.1 port 33668 ssh2
11月 03 20:02:04 fedora19 unix_chkpwd[4886]: password check failed for user (root)
11月 03 20:02:04 fedora19 sshd[4884]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0
tty=ssh ruser= rhost=192.168.122.1 user=root
11月 03 20:02:04 fedora19 sshd[4884]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by us
er "root"
11月 03 20:02:06 fedora19 sshd[4884]: Failed password for root from 192.168.122.1 port 33754 ssh2
11月 03 20:02:08 fedora19 sshd[4884]: Accepted password for root from 192.168.122.1 port 33754 ssh2
11月 03 20:08:04 fedora19 sshd[4975]: Accepted password for root from 192.168.122.1 port 33756 ssh2
Linux女子部 systemd徹底入門!
34
Unit設定ファイルの書き方
Open Cloud Campus
35
Linux女子部 systemd徹底入門!
Unit設定ファイルの内容 (1)
 Unitの設定ファイルは、[Unit]、[Install]などのセクションに分かれます。
– [Unit] : Unitの依存関係・順序関係などUnitのタイプに依存しない設定を記載
– [Install]:「systemctl enable/disable」コマンドに関連する設定を記載
– [Service]:serviceタイプに固有の設定項目を記載
– その他にも、各タイプに固有のセクションがあります。
 Unitセクションの主要オプション
– オプションに複数項目を記載する際は、スペース区切りにするか、もしくは、同じオプションを複
数回に分けて記載します。(他のセクションでも同様)
オプション 説明
Description Unitの説明文
Documentation ドキュメントのURI
Requires/Wants(*)
このUnitと同時に有効化が必要な前提Unit
After このUnitより先に起動するべきUnit
Before このUnitより後に起動するべきUnit
(*)「Requires」は、前提Unitが起動に失敗すると、このUnitの起動を取りやめます。
  「Wants」は、前提Unitが起動に失敗しても、このUnitの起動処理を行います。
Open Cloud Campus
36
Linux女子部 systemd徹底入門!
Unit設定ファイルの内容 (2)
 Installセクションの主要オプション
– 「WantedBy/RequiredBy」は、「systemctl enable」コマンドで自動起動を有効化した際に、どの
Unitの前提として設定されるべきかを指定します。
オプション 説明
WantedBy enable時にこのUnitの.wantsディレクトリにシンボリックリンクを作成する
RequiredBy enable時にこのUnitの.requiredディレクトリにシンボリックリンクを作成する
Also enable/disable時に同時にenable/disableするUnit
[Unit]
Description=OpenSSH server daemon
After=syslog.target network.target auditd.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStartPre=/usr/sbin/sshd-keygen
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
syslog/network/auditdの
環境がそろってから起動する
multi-user.targetの
前提として有効化する
/usr/lib/systemd/system/sshd.service
Open Cloud Campus
37
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (1)
 serviceセクションの主要オプション (1)
– 「ExecXXX」オプションは、サービスを起動、リロード、停止する際の実行コマンドを指定します。
「EnvironmentFile」で指定したファイルから読み込んだ環境変数と、後述の特殊環境変数
「$MAINPID」を参照できます。
– ExecStartの実行結果で起動の成功・失敗が判定されます。ExecStartPre/ExecStartPostの結果は
判定には影響しません。
– ExecStopPostは、ExecStopで正常終了した場合の他に、実行中のプロセスが異常停止した際にも
実行されます。
– KillModeは後で説明します。
オプション 説明
ExecStart サービス起動コマンド
ExecReload サービスリロードコマンド
ExecStop サービス停止コマンド
ExecStartPre
ExecStartPost
サービス起動前後の追加コマンド
(サービス起動判定には関連させたくないコマンドを記載)
ExecStopPost サービス停止後に実行するコマンド(サービスが異常停止した際にも実行される)
EnvironmentFile 環境変数を読み込むファイル
KillMode ExecStopで停止せずに残ったプロセスの処理方法
Open Cloud Campus
38
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (2)
 serviceセクションの主要オプション (2)
– Typeオプションは、サービスの起動完了を判定するタイミングを指定します。
• Type=simple : 指定コマンドがフォアグラウンドで実行を継続する場合。コマンドを実行した
らすぐに起動完了と判定します。
• Type=forking : 子プロセスをバックグラウンドで起動して、最初のコマンドは終了する場合。
最初のコマンドが終了したタイミングで起動完了と判定します。
• Type=oneshot : 一度だけコマンドを実行するタイプのサービスの場合。コマンドが終了した
ら起動完了と判定して、サービスも終了したものと認識します。(「RemainAfterExit=yes」
を指定すると、コマンド終了後もサービスは起動したままと認識します。)
• Type=nofity : systemdのライブラリ関数「sd_notify()」を使用する場合。プロセスのプログ
ラム内部で、sd_notify()関数で起動完了を通知するように作られている必要があります(*)
。
• Type=dbus : D-Bus(プロセス間通信用メッセージバス)を利用するサ―ビスの場合。 
BusNameで指定した接続名がD-Busに登録されると、サービス起動完了と判定します。
オプション 説明
Type サービスプロセスの起動完了の判定方法(デフォルトは「simple」)
PIDFile fork型サービスのメインプロセスのPIDファイル
BusName D-Bus型サービスのbus接続名
Restart サービスプロセス停止時の再起動条件(デフォルトは「no」)
(*) https://fedoraproject.org/wiki/User:Johannbg/QA/Systemd/Sd_notify
Open Cloud Campus
39
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (3)
 systemdは、サービスに関連するプロセス群の中で最初に実行された「メインプロセス」の
PIDを認識しており、ExecXXXオプション内から環境変数$MAINPIDで参照できます。
– ExecReloadオプションで、メインプロセスにHUPシグナルを送る際などに利用できます。
– 「type=simple」の場合は、ExecStartで起動したプロセスがメインプロセスになります。
– 「type=forking」の場合は、PIDFileオプションで指定のPIDファイルからメインプロセスを判定し
ます。(サービス起動コマンドが、PIDファイルを生成する作りになっている必要があります。)
 プロセスが異常終了した際の動作設定(従来のrespawn設定)は次のとおりです。
– Restartオプションでサービスの再起動を行うかどうか指定します。
• Restart=no : サービスの再起動は行いません。
• Restart=always : サービスの再起動を行います。
– デフォルトでは、10秒間の間に5回以上再起動すると、次の10秒間は再起動を試みません。一般に
は、「StartLimitIntervalの間にStartLimitBurst回以上再起動すると、次のStartLimitIntervalの
間は再起動を試みません」(つまり、「StartLimitInterval=10s」「StartLimitBurst=5」がデ
フォルト設定。)
Open Cloud Campus
40
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (4)
 systemdは、起動したサービスに関連するすべてのプロセスをCgroupsの個別のグループに
入れて管理しています。
– ExecStopのコマンドでサービスを停止した際、グループ内にプロセスが残っている場合
は、KillModeの設定に応じて残プロセスの処理を行います。
• KillMode=none : 残プロセスはそのまま放置します。
• KillMode=process : メインプロセスが残っている場合は、SIGTERM/SIGKILLで停止します。そ
の他の残プロセスは放置します。
• KillMode= control-group : グループ内のすべての残プロセスを、SIGTERM/SIGKILLで停止し
ます。
[Unit]
Description=OpenSSH server daemon
After=syslog.target network.target auditd.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStartPre=/usr/sbin/sshd-keygen
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
サービス起動前にホスト鍵を生成する
reload処理は、メインプロセスに
HUPシグナルを送る
/usr/lib/systemd/system/sshd.service
-Dオプション(デーモンモード)により、
最初のコマンドがそのまま実行を継続する。
従って「Type=simple(デフォルト)」が必要。
サービス終了時に残った
子プロセスは放置する
Open Cloud Campus
41
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (4)
 「Type=forking」はメインプロセスの追跡にPIDファイルが必要となることか
ら、systemdのサービス設定では、「Type=forking」よりも「Type=simple/notify」の利
用が推奨されます。
– 例えば、Fedora17のhttpd.serviceでは「Type=forking」だったものが、Fedroa19では
「Type=notify」に変更されています。
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop
KillSignal=SIGCONT
PrivateTmp=true
Fedora 19の/usr/lib/systemd/system/httpdd.service
[Service]
Type=forking
PIDFile=/var/run/httpd/httpd.pid
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -k start
ExecReload=/usr/sbin/httpd $OPTIONS -t
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/usr/sbin/httpd $OPTIONS -k stop
PrivateTmp=true
Fedora 17の/usr/lib/systemd/system/httpdd.service
PIDファイルでメインプロセスを追跡
子プロセスをバックグラウンドで起動して、
このコマンド自体は終了
httpdがsystemd前提に作られている(*)
-DFOREGROUNDオプションにより、このコマンドが実行を
継続する。起動完了はsd_notify()関数で通知する。
(*) mod_systemdモジュールでsystemdに対応しています。http://bit.ly/1bTIoKg
Open Cloud Campus
42
Linux女子部 systemd徹底入門!
serviceタイプの設定項目 (5)
 serviceセクションの主要オプション (3)
– User/Groupは、「ExecXXX=」で指定されたコマンドを実行するユーザ/グループを指定します。
• 「PermissionsStartOnly=yes」を指定すると「ExecStart=」で指定したコマンドのみが指定
ユーザ/グループで実行されます。
– その他は、サービスに関連するプロセスからアクセスできるディレクトリを制限します。
• これら機能は、ファイルシステムのネームスペースを分離することで実現しています。そのた
め、サービスを提供するプロセスがこのネームスペース内で実施したバインドマウントは、他
のプロセスからは見えなくなるという制限があります(*)
。
(*) まれな例ですが、サービスプロセスが「ip netns」コマンドを使用する際に問題が発生します。 このコマンドは、 
  /proc以下にあるNetwork Namespaceの情報を/var/run/netns/以下にバインド マウントすることで、他のプロセス
  と情報共有するためです。
Bug 872689 - Quantum: root cannot access network namespaces created by Quantum service
https://bugzilla.redhat.com/show_bug.cgi?id=872689
オプション 説明
User / Group プロセスを起動するユーザ / グループ
PrivateTmp このサービス専用の/tmpと/var/tmpを用意する
ReadOnlyDirectories 指定のディレクトリ以下をReadOnlyモードにする
InaccessibleDirectories 指定のディレクトリ以下をアクセス不可にする
RootDirectory 指定のディレクトリにchrootする
Linux女子部 systemd徹底入門!
43
知っておくと便利な機能
Open Cloud Campus
44
Linux女子部 systemd徹底入門!
Unitの無効化
 # systemctl mask/unmask <Unit名>
– 指定のUnitを無効化/有効化します。「mask」で無効化した場合は、「disable」と異なり、
「systemctl start」での手動起動もできなくなります。
– maskによる無効化は、/etc/systemd/system/以下に、/dev/nullへのシンボリックリンクとして設
定ファイルを作成することで行われます。したがって、/etc/systemd/system/以下に設定ファイル
を作成している場合は、maskによる無効化はできません。
# systemctl mask firewalld.service
ln -s '/dev/null' '/etc/systemd/system/firewalld.service'
# systemctl unmask firewalld.service
rm '/etc/systemd/system/firewalld.service'
Open Cloud Campus
45
Linux女子部 systemd徹底入門!
テンプレートタイプの設定ファイル
 「hogehoge@.service」という設定ファイルは、「hogehoge@<任意の文字列>.service」
という複数サービスの設定ファイルとして機能します。
– # systemctl start hogehoge@fuga.service
• 「hogehoge@.service」の設定に従って、サービス「hogehoge@fuga.service」が起動します。
この際、設定ファイル内の「%I」が「<任意の文字列>」(今の場合は「fuga」)に置換されま
す。(「%i」は「%I」内の記号文字を独自ルールでエスケープしたものになります。)
– # systemctl enable hogehoge@fuga.service
• .wantsディレクトリ内に、「hogehoge@fuga.service」から「hogehoge@.service」へのシン
ボリックリンクが作成されます。これによって、systemdは、「hogehoge@fuga.service」を
自動起動しようとしますが、実際には、「hogehoge@.service」の設定が使われます。
– 下図の例では、「getty@tty1.service」「getty@tty2.service」などが利用できます。
[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I 38400 linux
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
/lib/systemd/system/getty@.service([service]セクションの抜粋)
Linux女子部 systemd徹底入門!
46
参考資料
Open Cloud Campus
47
Linux女子部 systemd徹底入門!
参考資料
 freedesktop.org - systemd System and Service Manager
– systemdのプロジェクトページ
– http://www.freedesktop.org/wiki/Software/systemd/
 The systemd for Administrators Blog Series
– 開発者Lennartによる解説シリーズ(上記プロジェクトページにリンク一覧)
 Rethinking PID 1
– systemdの構想について記載されたLennartのブログ記事
– http://0pointer.de/blog/projects/systemd.html
 systemd の情報を集め始めよう
– Heartbeats社のブログ記事
– http://heartbeats.jp/hbblog/2013/10/systemd.html
 systemd(slideshare)
– レッドハット森若さんの概要説明資料
– http://www.slideshare.net/moriwaka/systemd
Open Cloud Campus
48
Linux女子部 systemd徹底入門!
参考資料
 systemd入門(1)〜(5):enakai00のブログ記事
– Unitの概念を理解する
• http://d.hatena.ne.jp/enakai00/20130914/1379146157
– Serviceの操作方法
• http://d.hatena.ne.jp/enakai00/20130915/1379212787
– cgroupsと動的生成Unitに関する小ネタ
• http://d.hatena.ne.jp/enakai00/20130916/1379295816
– serviceタイプUnitの設定ファイル
• http://d.hatena.ne.jp/enakai00/20130917/1379374797
– PrivateTmpの実装を見る
• http://d.hatena.ne.jp/enakai00/20130923/1379927579
 manページ
– systemdはmanページが非常に充実しています。各コマンドのmanページの他、manページ
systemd(1)から、「SEE ALSO」セクションのmanページをたどってください。
Open Cloud Campus
49
Linux女子部 systemd徹底入門!
QA
Linux女子部 systemd徹底入門!
50
中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
FedoraでLinux最新技術を
学びましょう!

More Related Content

What's hot

kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化dcubeio
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較beyond Co., Ltd.
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法Kumazaki Hiroki
 

What's hot (20)

kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
 

Similar to Linux女子部 systemd徹底入門

Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Etsuji Nakai
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編Etsuji Nakai
 
仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎Etsuji Nakai
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06ohtsuchi
 
SDN界隈の用語・考え方をざっくりまとめます。
SDN界隈の用語・考え方をざっくりまとめます。SDN界隈の用語・考え方をざっくりまとめます。
SDN界隈の用語・考え方をざっくりまとめます。Etsuji Nakai
 
OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11Akira Yoshiyama
 
RDOで体験! OpenStackの基本機能
RDOで体験! OpenStackの基本機能RDOで体験! OpenStackの基本機能
RDOで体験! OpenStackの基本機能Etsuji Nakai
 
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!Etsuji Nakai
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6ShinyaOzawa
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例terurou
 
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...Toshikazu Ichikawa
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理fisuda
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟貴仁 大和屋
 
Hadoop on eucalyptus_20110221
Hadoop on eucalyptus_20110221Hadoop on eucalyptus_20110221
Hadoop on eucalyptus_20110221Etsuji Nakai
 
Eucalyptus infra technology
Eucalyptus infra technologyEucalyptus infra technology
Eucalyptus infra technologyEtsuji Nakai
 
第2回 分散システム本読書会
第2回 分散システム本読書会第2回 分散システム本読書会
第2回 分散システム本読書会Kenji Ohtsuka
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術Preferred Networks
 

Similar to Linux女子部 systemd徹底入門 (20)

Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!
 
Linux女子部 iptables復習編
Linux女子部 iptables復習編Linux女子部 iptables復習編
Linux女子部 iptables復習編
 
仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎仮想化&クラウドで活用!自動化ツールの基礎
仮想化&クラウドで活用!自動化ツールの基礎
 
Java concurrency in_practice_chap06
Java concurrency in_practice_chap06Java concurrency in_practice_chap06
Java concurrency in_practice_chap06
 
SDN界隈の用語・考え方をざっくりまとめます。
SDN界隈の用語・考え方をざっくりまとめます。SDN界隈の用語・考え方をざっくりまとめます。
SDN界隈の用語・考え方をざっくりまとめます。
 
OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11OpenStack 最新動向 2016/11
OpenStack 最新動向 2016/11
 
RDOで体験! OpenStackの基本機能
RDOで体験! OpenStackの基本機能RDOで体験! OpenStackの基本機能
RDOで体験! OpenStackの基本機能
 
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
Continuous delivery 6
Continuous delivery 6Continuous delivery 6
Continuous delivery 6
 
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
 
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...
Report of OpenStack ops mid cycle meetup at Philadelphia in Mar, 2015 (In Jap...
 
FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理FIWAREシステム内の短期履歴の管理
FIWAREシステム内の短期履歴の管理
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟
 
Hadoop on eucalyptus_20110221
Hadoop on eucalyptus_20110221Hadoop on eucalyptus_20110221
Hadoop on eucalyptus_20110221
 
2011/11/26 Dot netlab
2011/11/26 Dot netlab2011/11/26 Dot netlab
2011/11/26 Dot netlab
 
Eucalyptus infra technology
Eucalyptus infra technologyEucalyptus infra technology
Eucalyptus infra technology
 
第2回 分散システム本読書会
第2回 分散システム本読書会第2回 分散システム本読書会
第2回 分散システム本読書会
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術20180729 Preferred Networksの機械学習クラスタを支える技術
20180729 Preferred Networksの機械学習クラスタを支える技術
 

More from Etsuji Nakai

「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考えるEtsuji Nakai
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Etsuji Nakai
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowEtsuji Nakai
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスEtsuji Nakai
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモEtsuji Nakai
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsEtsuji Nakai
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English LearningEtsuji Nakai
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎Etsuji Nakai
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門Etsuji Nakai
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineEtsuji Nakai
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2Etsuji Nakai
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersEtsuji Nakai
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterEtsuji Nakai
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginnersEtsuji Nakai
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQNEtsuji Nakai
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかEtsuji Nakai
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜Etsuji Nakai
 

More from Etsuji Nakai (20)

PRML11.2-11.3
PRML11.2-11.3PRML11.2-11.3
PRML11.2-11.3
 
「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlow
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービス
 
Spannerに関する技術メモ
Spannerに関する技術メモSpannerに関する技術メモ
Spannerに関する技術メモ
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English Learning
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with Jupyter
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginners
 
Life with jupyter
Life with jupyterLife with jupyter
Life with jupyter
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQN
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
PRML7.2
PRML7.2PRML7.2
PRML7.2
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 

Recently uploaded (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 

Linux女子部 systemd徹底入門

  • 1. Linux女子部 systemd徹底入門! 1 ver1.5 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス Linux女子部 systemd徹底入門!
  • 2. Open Cloud Campus 2 Linux女子部 systemd徹底入門! 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 「Linux独習書の新定番」 書きました! 読者の声より ―― 「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく   なっているのは不幸なことだと思う。そんな中、この本はすごくいい」 「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。  脳みそに染みこんで来ます」
  • 3. Open Cloud Campus 3 Linux女子部 systemd徹底入門! Contents  SysVinit & Upstartの復習  systemdによるシステム起動処理  systemdの操作方法  journaldによるログ管理  Unit設定ファイルの書き方  知っておくと便利な機能  参考資料 (*) 本資料の説明はFedora 19を前提としています。
  • 5. Open Cloud Campus 5 Linux女子部 systemd徹底入門! Linuxの起動プロセス (1)  「システムBIOS」が起動ディスクからブートローダ(GRUB)をメモリに読み込んで実行。  GRUBは起動カーネル選択画面を表示して、指定されたカーネルと初期ラムディスクをメモ リに読み込んだ後に、カーネルを実行。  カーネルは、初期ラムディスクの内容をメモリ上のラムディスク領域に展開して、「initス クリプト」を実行。 – 初期ラムディスクには、ルートファイルシステムへのアクセスに必要なデバイスドライバと「init スクリプト」が含まれます。 ブートローダ (GRUB) /bootファイルシステム ② ブートローダが   読み込み ③ ラムディスク領域   に展開 起動ディスク物理メモリ Linuxカーネル 初期ラムディスク Linuxカーネル 初期ラムディスク ラムディスク領域 ・デバイスドライバ ・initスクリプト ・その他コマンド類 ① システムBIOSから起動
  • 6. Open Cloud Campus 6 Linux女子部 systemd徹底入門! Linuxの起動プロセス (2)  「initスクリプト」は、必要なデバイスドライバを読み込んで、ルートファイルシステムを マウントした後に、最初のプロセスとなる「/sbin/init」を実行。 – 正確には、execコマンドにより、initスクリプトのプロセスが/sbin/initに置き換えられます。  ここで実行される「/sbin/init」が、これまでのSysVinit / Upstartの本体です。systemd では、ここで実行されるものが「/usr/bin/systemd」に変わります。 ※ 初期RAMディスクはcpio+gzipアーカイブファイルなのでpaxコマンドで展開可能です。 – # pax -rzf /boot/initramfs-2.6.32-131.0.15.el6.x86_64.img #!/bin/sh # # Licensed under the GPLv2 # # Copyright 2008-2009, Red Hat, Inc. # Harald Hoyer <harald@redhat.com> # Jeremy Katz <katzj@redhat.com> (中略) # start up udev and trigger cold plugs udevd --daemon –resolve-names=never (中略) exec switch_root "$NEWROOT" "$INIT" $initargs || { warn "Something went very badly wrong in the initramfs. Please " warn "file a bug against dracut." emergency_shell } fi udevで必要なドライバをロード execで/sbin/initに実行を切り替え RHEL6のinitスクリプトの例
  • 7. Open Cloud Campus 7 Linux女子部 systemd徹底入門! SysVinitの動作  SysVinit / Upstartは、ユーザレベルのサーバ初期設定やサービス起動処理を行います。  RHEL5の「/sbin/init」(SysVinit)は、設定ファイル「/etc/inittab」にしたがって次の 処理を行います。 id:5:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 (中略) # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 x:5:respawn:/etc/X11/prefdm -nodaemon RHEL5の/etc/inittabの例 – 初期設定スクリプト「/etc/rc.d/rc.sysinit」を実行して、ファ イルシステムのfsckチェックとマウント処理、その他、もろも ろのシステム初期化を実施します。 – スクリプト「/etc/rc.d/rc」を実行して、起動時のランレベルに 応じたサービスを起動します。 • 実際の起動処理は、/etc/init.d/以下のサービス個別のスク リプトから実施します。 – コンソールログインの受付プロセス(mingetty)を起動します。 – ランレベル5の場合は、GUIのログイン画面を起動します。 mingetty prefdm rc.sysinit システム初期化 サービス起動 ログイン受付 rc # /etc/init.d/<service名> start
  • 8. Open Cloud Campus 8 Linux女子部 systemd徹底入門! Upstartの動作  RHEL6の「/sbin/init」はUpstartと呼ばれるイベントベースのジョブ管理システムに変更 されています。 – 「/etc/inittab」はデフォルトのランレベル設定のみが記載されます。「/etc/init/」以下のジョブ 設定ファイルに従って、起動時に各種ジョブが実行されます。  ただし、実際にジョブとして実行される内容は、RHEL5とほぼ同じです。 "rcS"ジョブ起動 rc.sysinit telinit $runlevel "startup"イベント発行 /etc/init/rcS.conf "runlevel X"イベント発行 /etc/init/rc.conf "stopped rc"イベント発行 "start-ttys"ジョブ起動 initctl start tty TTY=$tty /etc/init/start-ttys.conf "prefdm"ジョブ起動 /etc/X11/prefdm -nodaemon /etc/init/prefdm.conf RUNLEVEL=5の場合 "tty"ジョブ起動 /sbin/mingetty TTY "rc"ジョブ起動 /etc/rc.d/rc $RUNLEVEL /etc/init/tty.conf /sbin/init起動
  • 9. Open Cloud Campus 9 Linux女子部 systemd徹底入門! サービス起動スクリプトの仕様  サービス起動スクリプト「/etc/init.d/<service名>」は、最低限、次の3つのオプションを 受け付る必要があります。 – start : サービスを開始 – stop : サービスを停止 – status : サービスの起動状態を返り値で応答  中身はただのシェルスクリプトのため、独自のオプションを受け付けたり、サービス (デーモン)起動以外の目的で利用されるものなどもあります。 – PosgreSQLのデータベースクラスタ初期化(独自オプションの利用) • # service postgresql initdb – 初回起動時の設定ウィザードの実行(サービス起動するわけではない) • # service firstboot start
  • 10. Open Cloud Campus 10 Linux女子部 systemd徹底入門! systemdが目指したもの  システム起動時間を短縮 – シェルスクリプトはシリアルに実行されるので効率が悪かった。シェルスクリプト内の処理を個別 に分割して、並列実行すれば、起動時間が短縮できる。  システム構成の動的変更に対応 – システム起動時だけではなく、システム構成の変更に応じて、動的に必要なサービスの起動・停止 を行いたい。  プロセス停止処理を標準機能として提供 – これまで、プロセスの停止処理は、サービススクリプト内で個別に実装されており、PIDファイルや プロセス名などを用いていた。systemd自身に、フォークしたデーモンプロセスをトラッキングし て、停止する機能を実装したい。  デーモンの実行環境を制御 – サービスごとに関連するデーモンの実行環境(Cgroupsによるリソース割り当てやアクセス可能な ディレクトリなど)を設定できるようにしたい。各デーモンのログ出力もまとめて管理したい。 http://0pointer.de/blog/projects/systemd.html
  • 12. Open Cloud Campus 12 Linux女子部 systemd徹底入門! systemdの最小処理単位 ー Unit  SysVinitの初期化スクリプトにまとめて含まれていた個々の処理を抜き出して、個別の 「Unit」として定義します。 rc.sysinit rc systemd-remount-fs.service systemd-udevd.service ・・・ chronyd.service crond.service dbus.service irqbalance.service mdmonitor.service NetworkManager.service rngd.service rpcbind.service rsyslog.service sshd.service ・・・ console-getty.service systemd-logind.service dev-hugepages.mount proc-sys-fs-binfmt_misc.mount tmp.mount ・・・ mingetty prefdm # /etc/init.d/<service名> start sys-devices-pci00...0:00:03.0-virtio0-net-eth0.device sys-devices-pci00...4.0-virtio1-block-vda-vda1.device sys-devices-pci00...4.0-virtio1-block-vda-vda2.device sys-devices-pci00...:00:04.0-virtio1-block-vda.device dev-dmx2d1.swap ・・・ これら全てが 「Unit」
  • 13. Open Cloud Campus 13 Linux女子部 systemd徹底入門! Unitの種類  Unitはいくつかのタイプに分かれており、拡張子で識別されます。主要なUnitには次のよ うなものがあります。 – .service:サービス • 有効化すると対応するデーモンが起動する。 – .target:何もしない • 後述の依存関係・順序関係を定義する際に、複数のUnitをグループ化するために使用する。 – .mount:マウントポイント • 有効化するとマウントされる。 – .swap:Swap領域 • 有効化するとSwap領域が有効になる。 – .device:デバイス • udevがデバイスを認識すると有効化される。 – .socket : ソケット • systemdが特定のソケットをListenする。接続があると、指定のデーモンを起動してソケット を受け渡す(従来のxinetdのような機能)  Unitには、明示的に設定するものと、自動的に作成されるものがあります。 – .serviceと.targetは、設定ファイルで明示的に定義します。 – .mountと.swapは、/etc/fstabから自動作成されます。 – .deviceは、udevによって自動作成されます。
  • 14. Open Cloud Campus 14 Linux女子部 systemd徹底入門! Unit定義ファイルの場所  Unitの定義ファイルは、次の2箇所にあります。 – /etc/systemd/system/以下:管理者がカスタマイズする内容 – /usr/lib/systemd/system/以下:システムデフォルトの設定  両方に同じ名前の設定ファイルがある場合は、/etc/systemd/systemが優先されます。 – システムデフォルトの設定を変更する際は、/usr/lib/systemd/systemから/etc/systemd/systemに 設定ファイルをコピーして、これを編集します。  Unit名がそのまま設定ファイル名になります。 – シンボリックリンクでUnitの別名を設定することができます。 – ディレクトリ「<Unit名>.wants」は、後述の依存関係の定義に使用します。 basic.target.wants dbus-org.fedoraproject.FirewallD1.service -> /usr/lib/systemd/system/firewalld.service dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service default.target -> /lib/systemd/system/multi-user.target default.target.wants getty.target.wants multi-user.target.wants sockets.target.wants sysinit.target.wants syslog.service -> /usr/lib/systemd/system/rsyslog.service system-update.target.want /etc/systemd/system内にある設定ファイルの例
  • 15. Open Cloud Campus 15 Linux女子部 systemd徹底入門! Unitの依存関係と順序関係  Unit間には「依存関係」と「順序関係」が定義されます。 – 依存関係は、「AというUnitを有効化するなら、BというUnitも有効化するべき」という関係 – 順序関係は、「AというUnitを有効化する前に、BというUnitを有効化するべき」という関係  systemdが起動すると、「default.target」というUnitが有効化されます。これにより、 「default.target」に依存するUnitがまとめて有効化されます。 – default.targetの実体は、「multi-user.target」「graphical.target」などへのシンボリックリンク です。リンク先を変えることが、「デフォルトrunlevelの変更」に相当します。 – 下図のように、主には、targetタイプのUnitで依存関係の骨組みを作って、その下にその他のタイ プのUnit群をまとめて依存させます。(例外もあります。) default.target multi-user.target basic.target NetworkManager.service avahi-daemon.service irqbalance.service remote-fs.target rsyslog.service ・・・ シンボリックリンク fedora-autorelabel-mark.service fedora-autorelabel.service fedora-configure.service fedora-loadmodules.service sys-kernel-config.mount sys-kernel-debug.mount systemd-journald.service systemd-modules-load.service systemd-random-seed-load.service systemd-sysctl.service systemd-udev-trigger.service systemd-udevd.service ・・・ sysinit.target
  • 16. Open Cloud Campus 16 Linux女子部 systemd徹底入門! 主要な依存関係の整理 multi-user.target シンボリックリンク graphical.target rescue.target runlevel 1で 起動するサービス runlevel 3で 起動するサービス runlevel 5で 起動するサービス basic.target default.target sysinit.target runlevelに依存せず 起動するサービス runlevelに依存せず 起動するサービス 従来のrc.sysinitで 行っていた処理 シンボリックリンク を切り替える local-fs.target swap.target swap領域の有効化 ファイルシステムの マウント処理
  • 17. Open Cloud Campus 17 Linux女子部 systemd徹底入門! 依存関係と順序関係の設定 (1)  systemdが起動すると、Unit間の「依存関係」を元に、全体として有効化されるUnit群を 決定します。 – ただし、それぞれのUnitを起動する「順序関係」は、これとはまったく独立に定義されます。 – systemdは、順序関係を持たないUnitについては、できるかぎり並列に起動処理を実施します。こ れにより、起動処理の並列度を高めて、システム起動時間を短縮します。  依存関係は、次のいずれかの方法で設定します。 – Unit設定ファイルの[Unit]セクションにおいて、「Wants=」オプション、もしくは、 「Requires=」オプションで、前提となる(一緒に有効化する)Unitを指定する。 – ディレクトリ「<Unit名>.wants」「<Unit名>.requires」内に、前提となる(一緒に有効化する) Unitの設定ファイルへのシンボリックリンクを作成する。 – 「Requires」は、前提Unitが起動に失敗すると、このUnitの起動を取りやめます。「Wants」は、 前提Unitが起動に失敗しても、このUnitの起動処理を行います。 – その他に「Conflicts=」オプションで、同時に有効化してはいけないUnitの指定ができます。
  • 18. Open Cloud Campus 18 Linux女子部 systemd徹底入門! 依存関係と順序関係の設定 (2)  「<Unit名>.wants」ディレクトリは、サービ スの自動起動を設定する際に利用されます。 – systemctlコマンドでサービスの自動起動を設定 すると、「WantedBy=」で指定されたUnitの 「.wants」ディレクトリに、設定ファイルへのシ ンボリックリンクが作成されます。 # systemctl disable sshd.service rm '/etc/systemd/system/multi-user.target.wants/sshd.service' # systemctl enable sshd.service ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service' # ls -l /etc/systemd/system/multi-user.target.wants/ 合計 0 lrwxrwxrwx. 1 root root 46 10月 30 12:35 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service lrwxrwxrwx. 1 root root 35 10月 30 12:36 atd.service -> /usr/lib/systemd/system/atd.service lrwxrwxrwx. 1 root root 38 10月 30 12:36 auditd.service -> /usr/lib/systemd/system/auditd.service lrwxrwxrwx. 1 root root 44 10月 30 12:35 avahi-daemon.service -> /usr/lib/systemd/system/avahi-daemon.service lrwxrwxrwx. 1 root root 39 10月 30 12:36 chronyd.service -> /usr/lib/systemd/system/chronyd.service ・・・ lrwxrwxrwx. 1 root root 36 11月 2 21:35 sshd.service -> /usr/lib/systemd/system/sshd.service sshd.serviceの自動起動を解除・設定する例 [Unit] Description=OpenSSH server daemon After=syslog.target network.target auditd.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStartPre=/usr/sbin/sshd-keygen ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target /usr/lib/systemd/system/sshd.service
  • 19. Open Cloud Campus 19 Linux女子部 systemd徹底入門! 依存関係と順序関係の設定 (2)  順序関係は、次の方法で設定します。 – Unit設定ファイルの[Unit]セクションにおいて、「After=」オプションと「Before=」オプション で指定します。 – 「After=A B C」:自分自身は、Unit「A」「B」「C」の後に起動する。 – 「Before=A B C」:自分自身は、Unit「A」「B」「C」の前に起動する。  Unit起動時の「待ち合わせ」ポイントとして、targetタイプのUnitを利用します。 – 例えば、「network.target」は、ネットワーク環境を準備するUnitと、ネットワーク環 境を使用するUnitの待ち合わせに使用します。 network.target ネットワーク環境を 準備するUnit ネットワーク環境を 使用するUnit Before=network.targetAfter=network.target [Unit] Description=firewalld - dynamic firewall daemon Before=network.target Before=libvirtd.service Before=NetworkManager.service ・・・ [Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target ・・・ /usr/lib/systemd/system/firewalld.service/usr/lib/systemd/system/httpd.service Firewallの構成が終わってから httpdが起動することが保証される Firewallの構成が終わってから httpdが起動することが保証される
  • 20. Open Cloud Campus 20 Linux女子部 systemd徹底入門! 依存関係と順序関係の設定 (3)  現在有効なUnitの依存関係、順序関係は次のコマンド確認できます。 – # systemctl list-dependencies <Unit名> • 指定Unitが必要とするUnitを表示します。(指定省略時は「default.target」) • 依存Unitがtargetタイプの際は、さらに、それが必要なUnitを再帰表示します。 • --allオプションをつけると、すべてのUnitを再帰表示します。 – # systemctl list-dependencies <Unit名> --after • 指定Unitより先に起動するUnitをツリー表示します。 • --allオプションは上と同様。 – # systemctl list-dependencies <Unit名> --before • 指定Unitより後に起動するUnitをツリー表示します。 • --allオプションは上と同様。 # systemctl list-dependencies default.target ├─atd.service ├─auditd.service ・・・ ├─basic.target │ ├─fedora-autorelabel-mark.service ・・・ │ ├─firewalld.service │ ├─paths.target │ ├─sockets.target │ │ ├─avahi-daemon.socket │ │ ├─dbus.socket ・・・ │ ├─sysinit.target │ │ ├─dev-hugepages.mount │ │ ├─dev-mqueue.mount │ │ ├─lvm2-monitor.service │ │ ├─plymouth-read-write.service │ │ ├─plymouth-start.service ・・・ ├─getty.target │ └─getty@tty1.service └─remote-fs.target
  • 21. Open Cloud Campus 21 Linux女子部 systemd徹底入門! 動的生成Unitについて (1)  /usr/lib/systemd/system-generators/以下のgenerator群は、システム環境に応じて、動的 なUnitの生成や、既存Unitの設定変更を行います。 – 例: – systemd-cryptsetup-generator • /etc/crypttabを参照して、systemd-cryptsetup@.serviceを生成します。 – systemd-fstab-generator • /etc/fstabを参照して、mountタイプとswapタイプのUnitを生成します。 • mountタイプは、マウントポイントのパスで「/」を「-」に置換したものがUnit名になります。 – systemd-rc-local-generator • /etc/rc.d/rc.localが実行可能ファイルの場合に、rc-local.serviceの自動起動を有効化します。  動的に生成されたUnitの設定ファイルは、/run/systemd/generator/以下に配置されます。 # ls /run/systemd/generator/ -.mount boot.mount dev-disk-byx2duuid-89cd76bex2d8d59x2d441cx2d9165x2dfe8ff338266b.device.wants dev-mapper-fedorax2dswap.device.wants dev-mapper-fedorax2dswap.swap local-fs.target.requires swap.target.wants
  • 22. Open Cloud Campus 22 Linux女子部 systemd徹底入門! 動的生成Unitについて (2)  udevがデバイスを認識した際に「systemd」というudevタグをつけると、対応するdevice タイプのUnitが有効化されます。 – 該当デバイスの/sysファイルシステムのパスで「/」を「-」に置換したものがUnit名になります。  Bluetoothコントローラ、プリンタ、スマートカード、サウンドカードに対応するデバイス は、それぞれ、bluetooth.target, printer.target, smartcard.target, sound.targetが、自 動的に前提のUnitになります。 – たとえば、サウンドカードを必要とするUnitをsound.targetの前提Unitとしておけば、サウンド カードを接続したタイミングで、このUnitが動的に有効化されます。 # systemctl list-units --type=device --full UNIT LOAD ACTIVE SUB DESCR sys-devices-pci0000:00-0000:00:01.1-ata2-host1-target1:0:0-1:0:0:0-block-sr0.device loaded active plugged QEMU_ sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virti sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda-vda1.device loaded active plugged /sys/ sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda-vda2.device loaded active plugged /sys/ sys-devices-pci0000:00-0000:00:04.0-virtio1-block-vda.device loaded active plugged /sys/ sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/ sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/ sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/ sys-devices-pnp0-00:04-tty-ttyS0.device loaded active plugged /sys/ sys-devices-virtual-block-dmx2d0.device loaded active plugged /sys/ sys-devices-virtual-block-dmx2d1.device loaded active plugged /sys/ sys-module-configfs.device loaded active plugged /sys/ sys-subsystem-net-devices-eth0.device loaded active plugged Virti
  • 24. Open Cloud Campus 24 Linux女子部 systemd徹底入門! Unitの一覧表示 (1)  # systemctl list-unit-files – 定義されているすべてのUnitとその状態(下表)を一覧表示します。 – --typeオプションで特定タイプのUnitのみを表示します。 Status 説明 enabled 「WantedBy=」指定あり。 自動起動が有効。 disabled 「WantedBy=」指定あり。 自動起動が無効。 static 「WantedBy=」指定なし。 # systemctl list-unit-files --type=service UNIT FILE STATE arp-ethers.service disabled atd.service enabled auditd.service enabled autovt@.service disabled avahi-daemon.service enabled blk-availability.service disabled chrony-wait.service disabled chronyd.service enabled console-getty.service disabled console-shell.service disabled crond.service enabled dbus-org.fedoraproject.FirewallD1.service enabled dbus-org.freedesktop.Avahi.service enabled dbus-org.freedesktop.hostname1.service static dbus-org.freedesktop.locale1.service static dbus-org.freedesktop.login1.service static dbus-org.freedesktop.NetworkManager.service enabled dbus-org.freedesktop.timedate1.service static dbus.service static ・・・ 従来の「chkconfig --list」に相当 systemctlコマンドで自動起動の 有効・無効を変更可能なUnit
  • 25. Open Cloud Campus 25 Linux女子部 systemd徹底入門! Unitの一覧表示 (2)  # systemctl list-units (「list-units」は省略可) – 現在有効な(有効であるべき)Unitとその状態を一覧表示します。 – --typeオプションで特定タイプのUnitのみを表示します。 # systemctl --type=service UNIT LOAD ACTIVE SUB DESCRIPTION atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack chronyd.service loaded active running NTP client/server crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus fedora-readonly.service loaded active exited Configure read-only root supp firewalld.service loaded active running firewalld - dynamic firewall getty@tty1.service loaded active running Getty on tty1 irqbalance.service loaded active running irqbalance daemon lvm2-lvmetad.service loaded active running LVM2 metadata daemon lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, s mcelog.service loaded active running Machine Check Exception Loggi NetworkManager.service loaded active running Network Manager polkit.service loaded active running Authorization Manager rngd.service loaded failed failed Hardware RNG Entropy Gatherer rpcbind.service loaded active running RPC bind service ・・・ systemd-v...le-setup.service loaded active exited Setup Virtual Console LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 31 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
  • 26. Open Cloud Campus 26 Linux女子部 systemd徹底入門! Unitの基本操作 (1)  # systemctl enable/disable <Unit名> – Unitの自動起動を有効化/無効化します。 – 実際には、「WantedBy=」で指定されたUnitへの依存関係を設定/削除します。  # systemctl start/stop/restart <Unit名> – 指定のUnitをその場で、起動/停止/再起動します。 – reloadコマンドは、Unit設定ファイルでreloadの動作が定義されている場合のみ使用できます。  # systemctl status <Unit名> – Unitの実行状態を表示します。 # systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since 日 2013-11-03 15:59:37 JST; 16s ago Main PID: 4621 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: name=systemd:/system/httpd.service ├─4621 /usr/sbin/httpd -DFOREGROUND ├─4622 /usr/sbin/httpd -DFOREGROUND ├─4623 /usr/sbin/httpd -DFOREGROUND ├─4624 /usr/sbin/httpd -DFOREGROUND ├─4625 /usr/sbin/httpd -DFOREGROUND └─4626 /usr/sbin/httpd -DFOREGROUND 11月 03 15:59:36 fedora19 systemd[1]: Starting The Apache HTTP Server... 11月 03 15:59:36 fedora19 httpd[4621]: AH00557: httpd: apr_sockaddr_info_ge...9 11月 03 15:59:36 fedora19 httpd[4621]: AH00558: httpd: Could not reliably d...e 11月 03 15:59:37 fedora19 systemd[1]: Started The Apache HTTP Server. 関連する直近のログを表示 関連するデーモンプロセスを表示
  • 27. Open Cloud Campus 27 Linux女子部 systemd徹底入門! Unitの基本操作 (2)  # systemctl daemon-reload – Unitの設定ファイルを変更した際に、変更内容をsystemdに認識させます。  chkconfigコマンド/serviceコマンドは、対応するsystemctlコマンドに変換されます。  サービス起動スクリプトで標準外のオプションを使用していたものは、systemd環境では使 用できなくなります。 – 例えば、PostgreSQLデータベースクラスタ初期化は、postgresql-setupコマンドを使用します。 • RHEL6: # service postgresql initdb • Fedora19: # postgresql-setup initdb # chkconfig sshd off 情報:'systemctl disable sshd.service'へ転送しています。 rm '/etc/systemd/system/multi-user.target.wants/sshd.service' # chkconfig sshd on 情報:'systemctl enable sshd.service'へ転送しています。 ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service' # service sshd stop Redirecting to /bin/systemctl stop sshd.service # service sshd start Redirecting to /bin/systemctl start sshd.service
  • 28. Open Cloud Campus 28 Linux女子部 systemd徹底入門! Cgroupsの確認  systemdは、Cgroupsを利用して、Unitごとに関連するプロセスを分類します。 – # systemd-cgls : Cgroupsによる分類をツリー表示 – # systemd-cgtop : グループごとのリソース使用状況をリアルタイムで表示 # systemd-cgls ├─system │ ├─1 /usr/lib/systemd/systemd --system --deserialize 17 │ ├─httpd.service │ │ ├─4621 /usr/sbin/httpd -DFOREGROUND │ │ ├─4622 /usr/sbin/httpd -DFOREGROUND │ │ ├─4623 /usr/sbin/httpd -DFOREGROUND │ │ ├─4624 /usr/sbin/httpd -DFOREGROUND │ │ ├─4625 /usr/sbin/httpd -DFOREGROUND │ │ └─4626 /usr/sbin/httpd -DFOREGROUND │ ├─sm-client.service │ │ └─560 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue │ ├─sendmail.service │ │ └─495 sendmail: accepting connections │ ├─rpcbind.service │ │ └─461 /sbin/rpcbind -w │ ├─sshd.service │ │ └─4440 /usr/sbin/sshd -D ・・・ │ └─systemd-journald.service │ └─285 /usr/lib/systemd/systemd-journald └─user └─0.user ├─108.session │ ├─4521 sshd: root@pts/1 │ ├─4525 -bash │ ├─4654 systemd-cgls │ └─4655 cat この下に、systemdから起動する Unitごとのサブグループを作成 この下に、ユーザアカウントごとの サブグループを作成。
  • 29. Open Cloud Campus 29 Linux女子部 systemd徹底入門! プロセスグループへのシグナル送信  Cgroupsの同じグループに属するプロセスにまとめてシグナルを送信することができます。 – 例: – # systemctl kill -s9 sshd.service • sshd.serviceのグループに属するプロセスにKILLシグナル(シグナル番号9)を送信します。 – これにより、サービスに関連するプロセスを漏れなく停止することができます。 – 「--kill-who=main」オプションをつけると、グループ内で最初に起動したメインプロセスのみに シグナルを送ります。  「systemctl stop」でUnitを停止する際にも利用されます。 – Unit定義ファイル内の「ExecStop=」で指定されたコマンドを実行して、それでも該当Unitのグ ループにプロセスが残っている場合は、これらにまとめて、「SIGTERM」、それでも残っていれば 「SIGKILL」を送ります。
  • 31. Open Cloud Campus 31 Linux女子部 systemd徹底入門! systemdのログ管理機能  systemdは、Unitとして起動したデーモンプロセスの標準出力、および、rsyslogdへの出力 内容を独自のロギングサービス(systemd-journald.service:通称「journald」)に送りま す。 – journaldは、出力内容にメタ情報を追加して、/var/log/journal/以下に記録します。 – journaldのログファイルはバイナリ形式のため、そのまま参照することはできません。journalctl コマンドで検索・表示します。  systemdの環境では、rsyslogdの設定変更が必要です。 – これまで、プロセスが出力するシステムログは、Unixソケット「/dev/log」を経由してrsyslogdに 送られていました。systemdは「/dev/log」からログを横取りした後、同じログをUnixソケット 「/run/systemd/journal/syslog」から再出力します。rsyslogdは、これからログを受け取るように 設定します。 rsyslogd /dev/log プロセス /dev/log プロセス rsyslogd /run/systemd/journal/syslog systemd $SystemLogSocketName /run/systemd/journal/syslog /etc/rsyslog.d/listen.conf 従来のシステムログの流れ systemd環境での システムログの流れ
  • 32. Open Cloud Campus 32 Linux女子部 systemd徹底入門! imjournalモジュールについて  最近のrsyslogdには、journaldのデータベースから直接にログ情報を取得するモジュール 「imjournal」が用意されており、Unixソケット「/run/systemd/journal/syslog」の代わ りに、こちらを利用することも可能です。 – RHEL7では、デフォルトでimjournalが使用されています。 – imjournalの詳細は下記を参照 • http://www.rsyslog.com/doc/imjournal.html
  • 33. Open Cloud Campus 33 Linux女子部 systemd徹底入門! journaldのログ検索  journalctlコマンドの主要なオプションは次のとおりです。 – -u <Unit名> : 指定Unitに関係するログのみを表示 – --since="YYYY-MM-DD hh:mm:ss" : この日時以降のログを表示 – --until="YYYY-MM-DD hh:mm:ss" : この日時までのログを表示 – -b : 直前のサーバ起動以降のログを表示 – -f : 「tail -f」のように新規のログを待って、順次表示する – --no-pager: lessコマンドを使用しない – -a : 長いメッセージを省略しない # journalctl -u sshd.service -b --no-pager -a -- Logs begin at 水 2013-10-30 12:40:32 JST, end at 日 2013-11-03 20:08:04 JST. -- ・・・ 11月 03 15:49:25 fedora19 systemd[1]: Starting OpenSSH server daemon... 11月 03 15:49:25 fedora19 systemd[1]: Started OpenSSH server daemon. 11月 03 15:49:25 fedora19 sshd[4440]: Server listening on 0.0.0.0 port 22. 11月 03 15:49:25 fedora19 sshd[4440]: Server listening on :: port 22. 11月 03 15:56:39 fedora19 sshd[4461]: Accepted password for root from ::1 port 51491 ssh2 11月 03 15:57:23 fedora19 sshd[4495]: Accepted password for root from 192.168.122.1 port 33665 ssh2 11月 03 15:57:26 fedora19 sshd[4521]: Accepted password for root from ::1 port 51492 ssh2 11月 03 16:06:28 fedora19 sshd[4660]: Accepted password for root from 192.168.122.1 port 33668 ssh2 11月 03 20:02:04 fedora19 unix_chkpwd[4886]: password check failed for user (root) 11月 03 20:02:04 fedora19 sshd[4884]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.122.1 user=root 11月 03 20:02:04 fedora19 sshd[4884]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by us er "root" 11月 03 20:02:06 fedora19 sshd[4884]: Failed password for root from 192.168.122.1 port 33754 ssh2 11月 03 20:02:08 fedora19 sshd[4884]: Accepted password for root from 192.168.122.1 port 33754 ssh2 11月 03 20:08:04 fedora19 sshd[4975]: Accepted password for root from 192.168.122.1 port 33756 ssh2
  • 35. Open Cloud Campus 35 Linux女子部 systemd徹底入門! Unit設定ファイルの内容 (1)  Unitの設定ファイルは、[Unit]、[Install]などのセクションに分かれます。 – [Unit] : Unitの依存関係・順序関係などUnitのタイプに依存しない設定を記載 – [Install]:「systemctl enable/disable」コマンドに関連する設定を記載 – [Service]:serviceタイプに固有の設定項目を記載 – その他にも、各タイプに固有のセクションがあります。  Unitセクションの主要オプション – オプションに複数項目を記載する際は、スペース区切りにするか、もしくは、同じオプションを複 数回に分けて記載します。(他のセクションでも同様) オプション 説明 Description Unitの説明文 Documentation ドキュメントのURI Requires/Wants(*) このUnitと同時に有効化が必要な前提Unit After このUnitより先に起動するべきUnit Before このUnitより後に起動するべきUnit (*)「Requires」は、前提Unitが起動に失敗すると、このUnitの起動を取りやめます。   「Wants」は、前提Unitが起動に失敗しても、このUnitの起動処理を行います。
  • 36. Open Cloud Campus 36 Linux女子部 systemd徹底入門! Unit設定ファイルの内容 (2)  Installセクションの主要オプション – 「WantedBy/RequiredBy」は、「systemctl enable」コマンドで自動起動を有効化した際に、どの Unitの前提として設定されるべきかを指定します。 オプション 説明 WantedBy enable時にこのUnitの.wantsディレクトリにシンボリックリンクを作成する RequiredBy enable時にこのUnitの.requiredディレクトリにシンボリックリンクを作成する Also enable/disable時に同時にenable/disableするUnit [Unit] Description=OpenSSH server daemon After=syslog.target network.target auditd.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStartPre=/usr/sbin/sshd-keygen ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target syslog/network/auditdの 環境がそろってから起動する multi-user.targetの 前提として有効化する /usr/lib/systemd/system/sshd.service
  • 37. Open Cloud Campus 37 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (1)  serviceセクションの主要オプション (1) – 「ExecXXX」オプションは、サービスを起動、リロード、停止する際の実行コマンドを指定します。 「EnvironmentFile」で指定したファイルから読み込んだ環境変数と、後述の特殊環境変数 「$MAINPID」を参照できます。 – ExecStartの実行結果で起動の成功・失敗が判定されます。ExecStartPre/ExecStartPostの結果は 判定には影響しません。 – ExecStopPostは、ExecStopで正常終了した場合の他に、実行中のプロセスが異常停止した際にも 実行されます。 – KillModeは後で説明します。 オプション 説明 ExecStart サービス起動コマンド ExecReload サービスリロードコマンド ExecStop サービス停止コマンド ExecStartPre ExecStartPost サービス起動前後の追加コマンド (サービス起動判定には関連させたくないコマンドを記載) ExecStopPost サービス停止後に実行するコマンド(サービスが異常停止した際にも実行される) EnvironmentFile 環境変数を読み込むファイル KillMode ExecStopで停止せずに残ったプロセスの処理方法
  • 38. Open Cloud Campus 38 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (2)  serviceセクションの主要オプション (2) – Typeオプションは、サービスの起動完了を判定するタイミングを指定します。 • Type=simple : 指定コマンドがフォアグラウンドで実行を継続する場合。コマンドを実行した らすぐに起動完了と判定します。 • Type=forking : 子プロセスをバックグラウンドで起動して、最初のコマンドは終了する場合。 最初のコマンドが終了したタイミングで起動完了と判定します。 • Type=oneshot : 一度だけコマンドを実行するタイプのサービスの場合。コマンドが終了した ら起動完了と判定して、サービスも終了したものと認識します。(「RemainAfterExit=yes」 を指定すると、コマンド終了後もサービスは起動したままと認識します。) • Type=nofity : systemdのライブラリ関数「sd_notify()」を使用する場合。プロセスのプログ ラム内部で、sd_notify()関数で起動完了を通知するように作られている必要があります(*) 。 • Type=dbus : D-Bus(プロセス間通信用メッセージバス)を利用するサ―ビスの場合。  BusNameで指定した接続名がD-Busに登録されると、サービス起動完了と判定します。 オプション 説明 Type サービスプロセスの起動完了の判定方法(デフォルトは「simple」) PIDFile fork型サービスのメインプロセスのPIDファイル BusName D-Bus型サービスのbus接続名 Restart サービスプロセス停止時の再起動条件(デフォルトは「no」) (*) https://fedoraproject.org/wiki/User:Johannbg/QA/Systemd/Sd_notify
  • 39. Open Cloud Campus 39 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (3)  systemdは、サービスに関連するプロセス群の中で最初に実行された「メインプロセス」の PIDを認識しており、ExecXXXオプション内から環境変数$MAINPIDで参照できます。 – ExecReloadオプションで、メインプロセスにHUPシグナルを送る際などに利用できます。 – 「type=simple」の場合は、ExecStartで起動したプロセスがメインプロセスになります。 – 「type=forking」の場合は、PIDFileオプションで指定のPIDファイルからメインプロセスを判定し ます。(サービス起動コマンドが、PIDファイルを生成する作りになっている必要があります。)  プロセスが異常終了した際の動作設定(従来のrespawn設定)は次のとおりです。 – Restartオプションでサービスの再起動を行うかどうか指定します。 • Restart=no : サービスの再起動は行いません。 • Restart=always : サービスの再起動を行います。 – デフォルトでは、10秒間の間に5回以上再起動すると、次の10秒間は再起動を試みません。一般に は、「StartLimitIntervalの間にStartLimitBurst回以上再起動すると、次のStartLimitIntervalの 間は再起動を試みません」(つまり、「StartLimitInterval=10s」「StartLimitBurst=5」がデ フォルト設定。)
  • 40. Open Cloud Campus 40 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (4)  systemdは、起動したサービスに関連するすべてのプロセスをCgroupsの個別のグループに 入れて管理しています。 – ExecStopのコマンドでサービスを停止した際、グループ内にプロセスが残っている場合 は、KillModeの設定に応じて残プロセスの処理を行います。 • KillMode=none : 残プロセスはそのまま放置します。 • KillMode=process : メインプロセスが残っている場合は、SIGTERM/SIGKILLで停止します。そ の他の残プロセスは放置します。 • KillMode= control-group : グループ内のすべての残プロセスを、SIGTERM/SIGKILLで停止し ます。 [Unit] Description=OpenSSH server daemon After=syslog.target network.target auditd.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStartPre=/usr/sbin/sshd-keygen ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process [Install] WantedBy=multi-user.target サービス起動前にホスト鍵を生成する reload処理は、メインプロセスに HUPシグナルを送る /usr/lib/systemd/system/sshd.service -Dオプション(デーモンモード)により、 最初のコマンドがそのまま実行を継続する。 従って「Type=simple(デフォルト)」が必要。 サービス終了時に残った 子プロセスは放置する
  • 41. Open Cloud Campus 41 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (4)  「Type=forking」はメインプロセスの追跡にPIDファイルが必要となることか ら、systemdのサービス設定では、「Type=forking」よりも「Type=simple/notify」の利 用が推奨されます。 – 例えば、Fedora17のhttpd.serviceでは「Type=forking」だったものが、Fedroa19では 「Type=notify」に変更されています。 [Service] Type=notify EnvironmentFile=/etc/sysconfig/httpd ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND ExecReload=/usr/sbin/httpd $OPTIONS -k graceful ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop KillSignal=SIGCONT PrivateTmp=true Fedora 19の/usr/lib/systemd/system/httpdd.service [Service] Type=forking PIDFile=/var/run/httpd/httpd.pid EnvironmentFile=/etc/sysconfig/httpd ExecStart=/usr/sbin/httpd $OPTIONS -k start ExecReload=/usr/sbin/httpd $OPTIONS -t ExecReload=/bin/kill -HUP $MAINPID ExecStop=/usr/sbin/httpd $OPTIONS -k stop PrivateTmp=true Fedora 17の/usr/lib/systemd/system/httpdd.service PIDファイルでメインプロセスを追跡 子プロセスをバックグラウンドで起動して、 このコマンド自体は終了 httpdがsystemd前提に作られている(*) -DFOREGROUNDオプションにより、このコマンドが実行を 継続する。起動完了はsd_notify()関数で通知する。 (*) mod_systemdモジュールでsystemdに対応しています。http://bit.ly/1bTIoKg
  • 42. Open Cloud Campus 42 Linux女子部 systemd徹底入門! serviceタイプの設定項目 (5)  serviceセクションの主要オプション (3) – User/Groupは、「ExecXXX=」で指定されたコマンドを実行するユーザ/グループを指定します。 • 「PermissionsStartOnly=yes」を指定すると「ExecStart=」で指定したコマンドのみが指定 ユーザ/グループで実行されます。 – その他は、サービスに関連するプロセスからアクセスできるディレクトリを制限します。 • これら機能は、ファイルシステムのネームスペースを分離することで実現しています。そのた め、サービスを提供するプロセスがこのネームスペース内で実施したバインドマウントは、他 のプロセスからは見えなくなるという制限があります(*) 。 (*) まれな例ですが、サービスプロセスが「ip netns」コマンドを使用する際に問題が発生します。 このコマンドは、    /proc以下にあるNetwork Namespaceの情報を/var/run/netns/以下にバインド マウントすることで、他のプロセス   と情報共有するためです。 Bug 872689 - Quantum: root cannot access network namespaces created by Quantum service https://bugzilla.redhat.com/show_bug.cgi?id=872689 オプション 説明 User / Group プロセスを起動するユーザ / グループ PrivateTmp このサービス専用の/tmpと/var/tmpを用意する ReadOnlyDirectories 指定のディレクトリ以下をReadOnlyモードにする InaccessibleDirectories 指定のディレクトリ以下をアクセス不可にする RootDirectory 指定のディレクトリにchrootする
  • 44. Open Cloud Campus 44 Linux女子部 systemd徹底入門! Unitの無効化  # systemctl mask/unmask <Unit名> – 指定のUnitを無効化/有効化します。「mask」で無効化した場合は、「disable」と異なり、 「systemctl start」での手動起動もできなくなります。 – maskによる無効化は、/etc/systemd/system/以下に、/dev/nullへのシンボリックリンクとして設 定ファイルを作成することで行われます。したがって、/etc/systemd/system/以下に設定ファイル を作成している場合は、maskによる無効化はできません。 # systemctl mask firewalld.service ln -s '/dev/null' '/etc/systemd/system/firewalld.service' # systemctl unmask firewalld.service rm '/etc/systemd/system/firewalld.service'
  • 45. Open Cloud Campus 45 Linux女子部 systemd徹底入門! テンプレートタイプの設定ファイル  「hogehoge@.service」という設定ファイルは、「hogehoge@<任意の文字列>.service」 という複数サービスの設定ファイルとして機能します。 – # systemctl start hogehoge@fuga.service • 「hogehoge@.service」の設定に従って、サービス「hogehoge@fuga.service」が起動します。 この際、設定ファイル内の「%I」が「<任意の文字列>」(今の場合は「fuga」)に置換されま す。(「%i」は「%I」内の記号文字を独自ルールでエスケープしたものになります。) – # systemctl enable hogehoge@fuga.service • .wantsディレクトリ内に、「hogehoge@fuga.service」から「hogehoge@.service」へのシン ボリックリンクが作成されます。これによって、systemdは、「hogehoge@fuga.service」を 自動起動しようとしますが、実際には、「hogehoge@.service」の設定が使われます。 – 下図の例では、「getty@tty1.service」「getty@tty2.service」などが利用できます。 [Service] # the VT is cleared by TTYVTDisallocate ExecStart=-/sbin/agetty --noclear %I 38400 linux Type=idle Restart=always RestartSec=0 UtmpIdentifier=%I TTYPath=/dev/%I TTYReset=yes TTYVHangup=yes TTYVTDisallocate=yes KillMode=process IgnoreSIGPIPE=no /lib/systemd/system/getty@.service([service]セクションの抜粋)
  • 47. Open Cloud Campus 47 Linux女子部 systemd徹底入門! 参考資料  freedesktop.org - systemd System and Service Manager – systemdのプロジェクトページ – http://www.freedesktop.org/wiki/Software/systemd/  The systemd for Administrators Blog Series – 開発者Lennartによる解説シリーズ(上記プロジェクトページにリンク一覧)  Rethinking PID 1 – systemdの構想について記載されたLennartのブログ記事 – http://0pointer.de/blog/projects/systemd.html  systemd の情報を集め始めよう – Heartbeats社のブログ記事 – http://heartbeats.jp/hbblog/2013/10/systemd.html  systemd(slideshare) – レッドハット森若さんの概要説明資料 – http://www.slideshare.net/moriwaka/systemd
  • 48. Open Cloud Campus 48 Linux女子部 systemd徹底入門! 参考資料  systemd入門(1)〜(5):enakai00のブログ記事 – Unitの概念を理解する • http://d.hatena.ne.jp/enakai00/20130914/1379146157 – Serviceの操作方法 • http://d.hatena.ne.jp/enakai00/20130915/1379212787 – cgroupsと動的生成Unitに関する小ネタ • http://d.hatena.ne.jp/enakai00/20130916/1379295816 – serviceタイプUnitの設定ファイル • http://d.hatena.ne.jp/enakai00/20130917/1379374797 – PrivateTmpの実装を見る • http://d.hatena.ne.jp/enakai00/20130923/1379927579  manページ – systemdはmanページが非常に充実しています。各コマンドのmanページの他、manページ systemd(1)から、「SEE ALSO」セクションのmanページをたどってください。
  • 49. Open Cloud Campus 49 Linux女子部 systemd徹底入門! QA