トップ 一覧 ping 検索 ヘルプ RSS ログイン

Systemdの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Systemd
[Linux]

*https://fedoraproject.org/wiki/Systemd
*http://d.hatena.ne.jp/enakai00/20130914/1379146157
*http://alpha.mixi.co.jp/2013/12063/
""Linuxの起動処理は、これまでinit/upstartと呼ばれる仕組みで行われていました。Red Hat Enterprise Linux 7 (RHEL7)では、これが、systemdと呼ばれるまったく新しい仕組みに置き換わります。

!!Unit
*systemdでは、「Unit」という単位で処理を管理
*rc.sysinitやサービス起動スクリプトが実施していた処理の内容は、すべて、Unitとして定義
*Unitは、「target」「mount」「service」「device」など、役割によってタイプがわかれている
**設定ファイル名の末尾「.target」「.service」で判別ができます
*Unitの定義ファイルは /usr/lib/systemd/system/ ディレクトリ配下にあります。


!Unitのタイプ	
,タイプ,説明
,mount,指定のファイルシステムをマウントする
,automount,オートマウント処理を実施する(automountdの代替的な機能)
,service,指定のバイナリを実行する(主にはデーモンの起動に使用する)
,socket,systemdがSocketをListenして、接続があるとプロセスに受け渡す(xinetdの代替的な機能)
,path,指定のファイルが作成されると、指定されたサービスを起動する
,device,udevから通知されたデバイスを表す
,target,複数のUnitをまとめるために使用する

!!systemctlコマンドによるUnitの確認
*「systemctl list-units」コマンドを利用すると、現在の設定で稼働しているUnitを確認することができます

::稼働サービスの一覧
 # systemctl list-units --type=service

!!on/offの設定
*chkconfigによるon/offに対応
::on
 # systemctl enable docker.service
::off
 # systemctl disable docker.service

!!ターゲットの設定
*/usr/lib/systemd/system/ 配下の設定ファイルを確認
""、runlevel 5に相当する「graphical.target」に対しては、「multi-user.target」が前提として定義されていますので、multi-user.targetで有効化されたserviceは、自動的にgraphical.targetでも有効化されます

::例
*runlevel 3と5で有効化したい → WantedByにmulti-user.targetを指定
*runlevel 5だけで有効化したい → WantedByにgraphical.targetを指定

 # cat /usr/lib/systemd/system/docker.service                                                       
 [Unit]
 Description=Docker Application Container Engine
 Documentation=http://docs.docker.io
 After=network.target
 Requires=docker.socket
 
 [Service]
 Type=notify
 EnvironmentFile=-/etc/sysconfig/docker
 ExecStart=/usr/bin/docker -d --selinux-enabled -H fd://
 Restart=on-failure
 LimitNOFILE=1048576
 LimitNPROC=1048576
 
 [Install]
 WantedBy=multi-user.target

!!サービスの確認
 # systemctl status docker.service
 docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
    Active: active (running) since 日 2014-07-13 23:04:55 JST; 30min ago
      Docs: http://docs.docker.io
  Main PID: 3072 (docker)
    CGroup: /system.slice/docker.service
            └─3072 /usr/bin/docker -d --selinux-enabled -H fd://
 
  7月 13 23:04:53 higeoyaji docker[3072]: [ba0e5300.init_networkdriver()] creating new bridge for docker0
  7月 13 23:04:54 higeoyaji docker[3072]: [ba0e5300.init_networkdriver()] getting iface addr
  7月 13 23:04:54 higeoyaji docker[3072]: [ba0e5300] -job init_networkdriver() = OK (0)
  7月 13 23:04:55 higeoyaji docker[3072]: Loading containers: : done.
  7月 13 23:04:55 higeoyaji docker[3072]: [ba0e5300.initserver()] Creating pidfile
  7月 13 23:04:55 higeoyaji docker[3072]: [ba0e5300.initserver()] Setting up signal traps
  7月 13 23:04:55 higeoyaji docker[3072]: [ba0e5300] -job initserver() = OK (0)
  7月 13 23:04:55 higeoyaji docker[3072]: [ba0e5300] +job acceptconnections()
  7月 13 23:04:55 higeoyaji docker[3072]: [ba0e5300] -job acceptconnections() = OK (0)
  7月 13 23:04:55 higeoyaji systemd[1]: Started Docker Application Container Engine.

!!再起動
 # systemctl restart docker.service
!!設定の再読み込み
 # systemctl reload [サービス]
""該当のserviceがreloadオプションに対応している必要あり
::例
*start/reloadの際に実行されるコマンドが指定されています(「ExecStart=」、および「ExecReload=」オプション)
 [Service]
 EnvironmentFile=/etc/sysconfig/sshd
 ExecStartPre=/usr/sbin/sshd-keygen
 ExecStart=/usr/sbin/sshd -D $OPTIONS
 ExecReload=/bin/kill -HUP $MAINPID

!!chkconfig/serviceコマンドとの共存
/etc/init.d/以下に旧来のサービススクリプトがある場合、そちらをchkconfig/serviceコマンドで操作することも可能です。CentOS7では、次のサービスはsystemdに移行せずに残っています。

 # chkconfig --list
 
 注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。
       systemd services. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。
       systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。
       特定のターゲットにおいて有効化されているサービスを確認するには、
       'systemctl list-dependencies [target]' 。
 
 iprdump         0:off   1:off   2:on    3:on    4:on    5:on    6:off
 iprinit         0:off   1:off   2:on    3:on    4:on    5:on    6:off
 iprupdate       0:off   1:off   2:on    3:on    4:on    5:on    6:off
 netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
 network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

""/etc/init.d/以下にスクリプトがないサービスに対して、chkconfig/serviceコマンドを実行した場合は、自動的に対応するsystemctlコマンドが発行されます。

!!各フェーズにおける起動時間
 # systemd-analyze
 Startup finished in 390ms (kernel) + 7.498s (initrd) + 24.687s (userspace) = 32.576s

!!仮想環境種類の判別
 # systemd-detect-virt
 microsoft