【Linux】【systemd】systemd について(概要編)

systemd の要点をまとめたページ。
詳細編 と重複する箇所もある。
 

 

参考にしたページ

すごく分かりやすい。

www.slideshare.net

Linux女子部 systemd徹底入門

 

systemd について

 

Unitの種類

  • mount と swap は /etc/fstab から自動生成される
  • device は udev により自動生成される

f:id:dnkrnka:20171209121923p:plain
 

Unit定義ファイルの置き場

  • システムデフォルト用とカスタム用がある
  • カスタム用は /etc/systemd/system/ に展開される。

f:id:dnkrnka:20171209121432p:plain


default.target の依存関係(1)

  • default.target はランレベルに応じた target へのシンボリックリンクとなっている。
  • systemctl list-dependencies コマンドでも確認可能である

f:id:dnkrnka:20171209121212p:plain


default.target の依存関係(2)

Unit ファイルでの Requires、Wants、Conflict、WantedBy、Before、After について

Unitファイルで Requires、Wants、Conflict、WantedBy、Before、After が指定される。

項目 意味
Requires 必要とする前提ユニットであり、失敗した場合は Unit の起動を止める。
Wants 必要とする前提ユニットであり、失敗した場合でも Unit の起動は継続する。
Conflicts 同時に実行してはいけない Unit。
WantedBy systemctl コマンドでサービスの自動起動を設定すると、「WantedBy」で指定された「ユニット名.wants」ディレクトリに、設定ファイルへのシンボリックリンクが張られる。
After 自身よりも先に起動させるサービスを指定する。
Before 自身の後に起動するサービスを指定する。

f:id:dnkrnka:20171209134722p:plain:w1000


default.target の依存関係(3)

ディレクトリによる Requires と Wants の指定も可能である。
 

ディレクトリによる Unit の Requires と Wants 定義
ファイル名
ユニット名.wants /lib/systemd/system/multi-user.target.wants/
ユニット名.requires /lib/systemd/system/multi-user.target.requires/

f:id:dnkrnka:20171209135914p:plain:w1000

 

systemctl コマンドについて

systemctl は /usb/bin/systemd のサブコマンド。
 

list-dependencies <ユニット名>

emergency.target の依存関係を全て表示する(--all)
% systemctl list-dependencies emergency.target --all
emergency.target
● └─emergency.service
●   ├─-.mount
●   │ └─system.slice
●   │   └─-.slice
●   └─system.slice
●     └─-.slice

 

emergency.service の依存関係を全て表示する(--all)
% systemctl list-dependencies emergency.service --all
emergency.service
● ├─-.mount
● │ └─system.slice
● │   └─-.slice
● └─system.slice
●   └─-.slice

 

list-unit-files

  • 定義されているユニットをすべて表示する。
  • STATE 欄の意味は次の通り
項目 意味
static WantedBy=による指定なし
generated
enabled 自動起動が有効である。(WantedBy=による指定あり)
disabled 自動起動が無効である。(WantedBy=による指定あり)
transient
% systemctl list-unit-files 
UNIT FILE                                  STATE    
proc-sys-fs-binfmt_misc.automount          static   
-.mount                                    generated
boot.mount                                 generated
dev-hugepages.mount                        static   
dev-mqueue.mount                           static   
proc-sys-fs-binfmt_misc.mount              static   
sys-fs-fuse-connections.mount              static   
sys-kernel-config.mount                    static   
sys-kernel-debug.mount                     static   
acpid.path                                 enabled  
cups.path                                  enabled  
systemd-ask-password-console.path          static   
systemd-ask-password-plymouth.path         static   
systemd-ask-password-wall.path             static   
session-c2.scope                           transient
accounts-daemon.service                    enabled  
acpid.service                              disabled 
(-- snip --)

 

list-units

現在有効なユニットを表示する。-type オプションでユニットの絞り込みが可能。

% systemctl list-units --type target
UNIT                       LOAD   ACTIVE SUB    DESCRIPTION                
basic.target               loaded active active Basic System               
cryptsetup.target          loaded active active Encrypted Volumes          
getty.target               loaded active active Login Prompts              
graphical.target           loaded active active Graphical Interface        
local-fs-pre.target        loaded active active Local File Systems (Pre)   
local-fs.target            loaded active active Local File Systems         
multi-user.target          loaded active active Multi-User System          
network-online.target      loaded active active Network is Online          
network-pre.target         loaded active active Network (Pre)              
network.target             loaded active active Network                    
nss-user-lookup.target     loaded active active User and Group Name Lookups
paths.target               loaded active active Paths                      
remote-fs.target           loaded active active Remote File Systems        
slices.target              loaded active active Slices                     
sockets.target             loaded active active Sockets                    
sound.target               loaded active active Sound Card                 
swap.target                loaded active active Swap                       
sysinit.target             loaded active active System Initialization      
time-sync.target           loaded active active System Time Synchronized   
timers.target              loaded active active Timers                     
virt-guest-shutdown.target loaded active active Libvirt guests shutdown    

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.

21 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.



enable, disable, status について

コマンド 機能
enable 自動起動を有効にする
disable 自動起動を無効にする
status ユニットの起動状態を表示する
実行例
% systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Sat 2017-12-09 09:38:40 JST; 5h 8min ago
  Process: 2233 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
    Tasks: 77 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─1233 /usr/sbin/apache2 -k start
           ├─2238 Passenger watchdog
           ├─2241 Passenger core
           ├─2250 Passenger ust-router
           ├─2266 /usr/sbin/apache2 -k start
           └─2267 /usr/sbin/apache2 -k start

1209 09:38:30 PC-Vostro-230 systemd[1]: Starting The Apache HTTP Server...
1209 09:38:33 PC-Vostro-230 apachectl[986]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive global
12月 09 09:38:40 PC-Vostro-230 systemd[1]: Started The Apache HTTP Server.
12月 09 09:43:39 PC-Vostro-230 systemd[1]: Reloading The Apache HTTP Server.
12月 09 09:43:39 PC-Vostro-230 apachectl[2233]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globa
1209 09:43:39 PC-Vostro-230 systemd[1]: Reloaded The Apache HTTP Server.
% sudo systemctl disable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable apache2
% sudo systemctl enable apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2



start, stop, restart について

コマンド 機能
start 起動
stop 停止
restart 再起動
実行例
% sudo systemctl stop apache2
% sudo systemctl start apache2
% sudo systemctl restart apache2


 

systemd-cgls について

Cgroups 単位でのユニット表示をする。

% systemd-cgls 
Control group /:
-.slice
├─user.slice
│ └─user-1000.slice
│   ├─user@1000.service
│   │ ├─indicator-messages.service
│   │ │ └─2817 /usr/lib/x86_64-linux-gnu/indicator-messages/indicator-messages-service
│   │ ├─indicator-printers.service
│   │ │ └─2786 /usr/lib/x86_64-linux-gnu/indicator-printers/indicator-printers-service
│   │ ├─zeitgeist.service
│   │ │ └─3176 /usr/bin/zeitgeist-daemon
│   │ ├─gnome-terminal-server.service
│   │ │ ├─ 3210 /usr/lib/gnome-terminal/gnome-terminal-server
│   │ │ ├─ 3217 fish
│   │ │ ├─ 4741 /home/neko/bin/nvim-qt --nofork
│   │ │ ├─ 4755 nvim --cmd let &rtp.=',/home/neko' --cmd set termguicolors --embed --headless
│   │ │ ├─ 4809 /bin/sh /usr/bin/astah-com
│   │ │ ├─ 4834 java -Xms16m -Xmx384m -splash:/usr/lib/astah_community/astah_splash_community.png -jar /usr/lib/astah_community/astah-community.jar
│   │ │ ├─10769 systemd-cgls
│   │ │ └─10770 pager
│   │ ├─window-stack-bridge.service
│   │ │ └─2796 /usr/lib/x86_64-linux-gnu/hud/window-stack-bridge
│   │ ├─unity-panel-service.service
│   │ │ └─2966 /usr/lib/x86_64-linux-gnu/unity/unity-panel-service
│   │ ├─indicator-session.service
│   │ │ └─2797 /usr/lib/x86_64-linux-gnu/indicator-session/indicator-session-service
│   │ ├─indicator-keyboard.service
│   │ │ └─2784 /usr/lib/x86_64-linux-gnu/indicator-keyboard/indicator-keyboard-service --use-gtk
│   │ ├─bamfdaemon.service
│   │ │ └─2795 /usr/lib/x86_64-linux-gnu/bamf/bamfdaemon
│   │ ├─zeitgeist-fts.service
│   │ │ └─3184 /usr/lib/zeitgeist/zeitgeist/zeitgeist-fts
│   │ ├─dbus.service
│   │ │ ├─2498 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
│   │ │ ├─2847 /usr/lib/dconf/dconf-service
│   │ │ ├─2916 /usr/bin/python3 /usr/bin/libertined --cache-output
(-- snip --)



systemd-cgtop について

Cgroups 単位でのリソース表示をする。

Control Group                             Tasks   %CPU   Memory  Input/s Output/s
/                                             -   28.9     3.4G        -        -
/init.scope                                   1      -        -        -        -
/system.slice                               223      -        -        -        -
/system.slice/ModemManager.service            3      -        -        -        -
/system.slice/NetworkManager.service          4      -        -        -        -
/system.slice/accounts-daemon.service         3      -        -        -        -
/system.slice/acpid.service                   1      -        -        -        -
/system.slice/apache2.service                77      -        -        -        -
/system.slice/avahi-daemon.service            2      -        -        -        -
/system.slice/colord.service                  3      -        -        -        -
/system.slice/cron.service                    1      -        -        -        -
/system.slice/cups-browsed.service            3      -        -        -        -
(--snip)



SystemVInit (chkconfig) と Systemd (systemctl)とのコマンド比較

以下、CentOS6, CentOS7 システムコマンド対応表 より転記する。

ランレベル

SystemVInit Systemd
シャットダウン shutdown -h now systemctl poweroff
シングルユーザーモード init S systemctl rescue
マルチユーザー、コンソールログインのみ(RunLv3) init 3 systemctl multi-user
RunLv3 + Xディスプレイマネージャ起動 init 5 systemctl graphical
再起動 shutdown -r now systemctl reboot

例: sshd 操作

SystemVInit Systemd
サービス一覧 chkconfig --list systemctl --type service
サービス自動起動ON chkconfig sshd on systemctl enable sshd
サービス自動起動ON chkconfig sshd off systemctl disable sshd
サービス起動 service sshd start systemctl start sshd
サービス停止 service sshd stop systemctl stop sshd
サービス強制終了 kill -9 systemctl kill --signal=9 sshd
サービス再起動 service sshd restart systemctl restart sshd
サービス状態確認 service sshd status systemctl status sshd
サービス設定リロード service sshd reload systemctl reload sshd