#amazon(xxxxx)
systemd とは †
- Red Hat Enterprise Linux 7.0 から登場
- init の代わり
- プロセス番号 1
- 様々な機能が systemd に置き換わっている
ユニット †
- 設定ファイルであり、スクリプトではない
- 依存関係の定義が可能
- Wants, Requires, Comflict, Before, After...
- ユニット ファイルに上記を記載する方法と、unit.wants ディレクトリにユニットへのシンボリック リンクを作成する方法がある
- 依存関係が定義されていない場合は並列で起動される
- 依存関係がない場合、並列で起動させる
- デフォルトでは /usr/lib/systemd/system に保存されている (このパスは編集するべきではない)
- デフォルトの定義を変更する場合は /etc/systemd/system にコピーし、編集する (このパスの方が優先される)
拡張子 | 用途 |
.service | デーモンに関する設定 (/etc/init.d の代替) |
.mount | ファイル システム (/etc/fstab の代替) |
.socket | ソケットアクセスをトリガとした起動 (/etc/xinetd.d の代替) |
.device | |
.path | 特定のパスの状態をトリガとした起動 |
.target | 複数のユニットをまとめたもの |
ユニット ファイル †
Unit †
Service †
- EnvironmentFile
- ExecStartPre
- ExecStart
- systemctl start umit 時に実行するコマンド
- ExecReload
- systemctl reload umit 時に実行するコマンド
- 定義されていないユニットでは systemctl reload は出来ない
Install †
- WantedBy
- 起動の前提となるターゲット (unit.target)
- systemctl enable/disable unit 時に指定されたターゲットの unit.target.wants 内のシンボリック リンクを作成/削除する
- multi-user.target は graphical.target の前提となっているため両方に指定する必要はない
ターゲット †
- 複数のユニットをまとめたディレクトリ
- systemd が起動すると、まず default.target を起動する
デーモン制御 (service) †
起動 †
$ systemctl start unit
停止 †
$ systemctl stop unit
再起動 †
$ systemctl restart unit
設定読み込み †
$ systemctl reload unit
確認 †
$ systemctl status unit
ランレベル (runlevel) †
概要 †
- ランレベルという概念はなく、ターゲットごとに起動するユニットを定義する
- /etc/systemd/system/default.target のリンク先で決まる
- /etc/systemd/system/unit.target.wants 内にユニットへのシンボリック リンクを配置する (/etc/rcn.d の代替)
ランレベル | ターゲット | 備考 |
0 | poweroff.target | |
1 | rescue.target | |
3 | multi-user.target | |
5 | graphical.target | multi-user.target に依存 |
6 | reboot.target | |
デフォルト設定の確認 †
# systemctl get-default
target
# ls -l default.target
lrwxrwxrwx. 1 root root 16 Mar 17 21:17 default.target -> graphical.target
デフォルト設定の変更 †
# systemctl set-default target
一時的な変更 †
# systemctl isolate target
自動起動設定 (chkconfig) †
- /etc/systemd/system/unit.target.wants に作成されたユニットが起動される
自動起動設定 †
- 有効化
# systemctl enable unit
- ユニット ファイルの [Install] セクションに従い、/etc/systemd/system/unit.target.wants にシンボリック リンクを作成する
# systemd-sysv-install enable
自動起動解除 †
- 無効化
# systemctl disable unit
- ユニット ファイルの [Install] セクションに従い、/etc/systemd/system/unit.target.wants からシンボリック リンクを削除する
確認 †
ログ †
- ジャーナルの操作は journalctl で行う
- デフォルトでは less がページャーとして使われる
- /dev/log からの読み込みは systemd-journald が行い、ジャーナルに保存する
- systemd-journald は /run/systemd/journal/syslog にもログを転送し、rsyslog はここから読み込む
# journalctl [option]
オプション | 意味 | 説明 |
-k | kernel | Kernel のログのみを出力 |
-u unit | unit | 特定ユニットのログのみを出力 |
_PID=pid | | 特定プロセス ID のログのみを出力 |
-x | | 詳細なログを出力 |
-f | follow | 新しいログを出力し続ける |
-r | reverse | 新しいもの順に出力 |
-n [number] | | 末尾 number 行を出力 (デフォルトは 10) |
-e | pager end | 末尾 1000 行を出力し、最後ページを表示する |
-b [num] | boot | 起動からすべてのログを出力 負数で num 回前の起動時のログ、正数で num 回目の起動時のログ (デフォルトでは再起動で消える) |
-S "YYYY-MM-DD hh:mm:ss" | since | 指定時間以降のログを出力 |
-U "YYYY-MM-DD hh:mm:ss" | until | 指定時間以前のログを出力 |
/etc/systemd/journald.conf †
- Storage
- volatile … /run/log/journal に保存され、再起動で消える (デフォルト)
- persistent … /var/log/journal に保存される
- auto … ?
- none … すべてのログを破棄する
- SystemMaxUse, RuntimeMaxUse
- ジャーナルが使用する最大容量
- デフォルトではディスク容量の 10%、ただし最大 4GB
- System~ は /var/log/journal の容量、Runtime~/run/log/journal の容量に適用される
- SystemKeepFree, RuntimeKeepFree
- ジャーナル以外の用途に確保する容量 (DiskSpace - KeepFree = MaxUse)
- デフォルトではディスク容量の 15%、ただし最大 4GB
- MaxUse と同時に指定した場合、ジャーナルの容量が少ない方が適用される?
- SystemMaxFileSize, RuntimeMaxFileSize
- 1 世代あたりの最大容量
- デフォルトは MaxUse の 1/8 であるため、7 世代の過去ジャーナルが保存可能
起動所要時間 †
$ systemd-analyze
Startup finished in 4.181s (kernel) + 8.623s (initrd) + 13.355s (userspace) = 26.160s
日付と時刻 (timedatectl) †
- Systemd には日付と時刻に関するツールが組み込まれている。
- NTPd、Chrony を使わずに NTP サーバとの時刻同期も可能。
確認 †
$ timedatectl status
Local time: Tue 2018-05-01 16:39:59 JST
Universal time: Tue 2018-05-01 07:39:59 UTC
RTC time: Tue 2018-05-01 07:40:00
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
設定 †
時刻 †
/etc/systemd/timesyncd.conf †
仮想基盤情報 †
$ systemd-detect-virt
microsoft