systemd

概要

  • SysVinitに代わる新しいinitの仕組み。
  • 扱う処理をUnitという単位で管理する。
  • サービスの並列起動によって高速なシステム起動や停止が行える
  • cgroupsでプロセスのリソースを管理する。

通常システムの起動(SysVinitの場合 )は下記の順番で行われる

  1. BIOS
  2. ブートローダ
  3. カーネル
  4. init (/sbin/initのこと)
    • /etc/inittab を読み込む
    • /etc/rc.sysinit スクリプトを実行する
    • /etc/rc スクリプトを実行する
    • /etc/rc スクリプトが /etc/rc<ランレベル>.d/ 以下のスクリプト実行(root権限必要)

最近は上記 ”4”のinitの代わりに ”systemd” が使用されている。

systemdの特徴

  • ユニット
    • systemdは、ユニット(unit)単位でシステムを管理。
    • 管理しているユニットは、/etc/systemd/system/ 以下に各拡張子を持ったファイルで保存される
      拡張子 機能
       device  各種デバイスを管理するUnit
       mount  ファイルシステムのマウントを管理するUnit
       service  サービスを制御するUnit
       swap  スワップ領域を管理するUnit
       target  複数のサービスを一つのグループにするためのUnit
    • システム起動時に最初に実行されるUnit →  /etc/systemd/system/default.target
  • システム管理の統一
    • 以前のsysVinitではサービスの管理方法が統一されていない(ディストリビューションごとに違う)
    • systemdでは管理方法が一本化され、異なるディストリビューションでも同様の操作での対応が可能。
  • 起動速度
    • systemdはsysVinitに比べてシステム(system)の起動速度が速い。
    • sysVinitはサービスの起動を1サービスずつ順番に行っていくシェルスクリプト方式を採用
    • systemdはユニット処理を同時に実行できるため、起動にかかる時間が少ない。
    • 起動時は一部の機能だけの起動が優先的に行い、後から他に必要なものを必要なタイミングで起動する。
  • Cgroup
    • cgroup(Control Group)はプロセスをグループ化して,そのグループ内に存在するプロセスに対して共通の管理を行う
    • ホストOSが持つCPUやメモリなどのリソースに対して,グループごとに制限をかけることができます。
  • 以下のデーモンプロセスが連携して動作。
    プロセス名 機能
     systemd  systemdの本体となるプロセス。initの代わりに常駐
     systemd-journald  systemdが制御する各サービスが出力するログを扱う
     systemd-logind  システムへのログイン、起動停止、電源ボタン操作などを管理
     systemd-udevd  従来のudevに代わり、デバイスの動的変更、検出を行う
  • SysVinitのランレベルとsystemdのターゲット比較。 /lib/systemd/system に格納
    ランレベル ターゲット
    poweroff-target
    rescue.target
    2,3,4 multi-user.target
    graphical.target
    reboot.target

次回起動時にグラフィカルログインさせる ー> default.target を graphical.target のシンボリックリンクに設定。


rm -f /etc/systemd/system/default.target
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target

systemctl

systemdを管理するためのコマンド。

書式:systemctl[サブコマンド]

サブコマンド 用途
 disable  サービスの自動起動を無効にする
 enable  サービスの自動起動を有効にする
 is-enable  有効の場合はenabledを、無効の場合はdisabledを返します
 get-default  次回起動時のターゲットを表示する
 halt  システムを停止しhalt状態にする
 is-active  サービスが稼働しているかを表示
 list-unit-files  すべてのUnit定義ファイルを一覧表示する
 reboot  システムを再起動する
 reload  サービス設定ファイルを再読込する
 restart  サービスを再起動する
 set-default  次回起動時のターゲットを設定する
 start  サービスを起動する
 status  サービスの状態を表示する
 stop  サービスを停止する
 poweroff  システムを停止し電源を切断する
 default  システムをデフォルトのモードにする
 mask  サービスが起動出来ない
 unmask  maskの解除

例:

システムを今すぐ再起動さる  systemctl start reboot.target
 systemctl reboot
 telinit 6
 shutdown -r now
systemctl rescue後、通常の起動状態に戻す

 Ctrl-Dを入力する
 systemctl reboot コマンドを実行する
 systemctl default コマンドを実行する
次回起動時にグラフィカルログインさせる  systemctl set-default graphical.target
次回起動時のターゲットを確認  systemctl get-default
次回起動時にメンテナンスを行うために最低限のシステムサービス状態で起動  systemctl rescue.target
 systemctl runlevel1.target (SysVinitとの関連が分りやすい様に、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されている。)