「Systemd」の版間の差分
ナビゲーションに移動
検索に移動
| (同じ利用者による、間の1版が非表示) | |||
| 1行目: | 1行目: | ||
| − | ==Systemd== | + | ==[[Systemd]]== |
| − | [[Linux]] | + | [[Linux]] | |
| − | *https://fedoraproject.org/wiki/Systemd | + | *https://fedoraproject.org/wiki/[[Systemd]] |
*http://d.hatena.ne.jp/enakai00/20130914/1379146157 | *http://d.hatena.ne.jp/enakai00/20130914/1379146157 | ||
*http://alpha.mixi.co.jp/2013/12063/ | *http://alpha.mixi.co.jp/2013/12063/ | ||
| − | <blockquote> | + | <blockquote>[[Linux]]の起動処理は、これまでinit/upstartと呼ばれる仕組みで行われていました。Red Hat Enterprise [[Linux]] 7 (RHEL7)では、これが、systemdと呼ばれるまったく新しい仕組みに置き換わります。</blockquote> |
===Unit=== | ===Unit=== | ||
*systemdでは、「Unit」という単位で処理を管理 | *systemdでは、「Unit」という単位で処理を管理 | ||
*rc.sysinitやサービス起動スクリプトが実施していた処理の内容は、すべて、Unitとして定義 | *rc.sysinitやサービス起動スクリプトが実施していた処理の内容は、すべて、Unitとして定義 | ||
| − | * | + | *Unitは、「target」「mount」「ser[[vi]]ce」「de[[vi]]ce」など、役割によってタイプがわかれている |
| − | **設定ファイル名の末尾「.target」「. | + | **設定ファイル名の末尾「.target」「.ser[[vi]]ce」で判別ができます |
*Unitの定義ファイルは /usr/lib/systemd/system/ ディレクトリ配下にあります。 | *Unitの定義ファイルは /usr/lib/systemd/system/ ディレクトリ配下にあります。 | ||
| 26行目: | 26行目: | ||
|オートマウント処理を実施する(automountdの代替的な機能) | |オートマウント処理を実施する(automountdの代替的な機能) | ||
|- | |- | ||
| − | | | + | |ser[[vi]]ce |
|指定のバイナリを実行する(主にはデーモンの起動に使用する) | |指定のバイナリを実行する(主にはデーモンの起動に使用する) | ||
|- | |- | ||
| 35行目: | 35行目: | ||
|指定のファイルが作成されると、指定されたサービスを起動する | |指定のファイルが作成されると、指定されたサービスを起動する | ||
|- | |- | ||
| − | | | + | |de[[vi]]ce |
|udevから通知されたデバイスを表す | |udevから通知されたデバイスを表す | ||
|- | |- | ||
| 47行目: | 47行目: | ||
=====稼働サービスの一覧===== | =====稼働サービスの一覧===== | ||
| − | # systemctl list-units --type= | + | # systemctl list-units --type=ser[[vi]]ce |
===on/offの設定=== | ===on/offの設定=== | ||
| − | * | + | *[[chkconfig]]によるon/offに対応 |
=====on===== | =====on===== | ||
| − | # systemctl enable docker. | + | # systemctl enable docker.ser[[vi]]ce |
=====off===== | =====off===== | ||
| − | # systemctl disable docker. | + | # systemctl disable docker.ser[[vi]]ce |
===ターゲットの設定=== | ===ターゲットの設定=== | ||
*/usr/lib/systemd/system/ 配下の設定ファイルを確認 | */usr/lib/systemd/system/ 配下の設定ファイルを確認 | ||
| − | <blockquote>、runlevel 5に相当する「graphical.target」に対しては、「multi-user.target」が前提として定義されていますので、multi-user. | + | <blockquote>、runlevel 5に相当する「graphical.target」に対しては、「multi-user.target」が前提として定義されていますので、multi-user.targetで有効化されたser[[vi]]ceは、自動的にgraphical.targetでも有効化されます</blockquote> |
=====例===== | =====例===== | ||
| 64行目: | 64行目: | ||
*runlevel 5だけで有効化したい → WantedByにgraphical.targetを指定 | *runlevel 5だけで有効化したい → WantedByにgraphical.targetを指定 | ||
| − | # cat /usr/lib/systemd/system/docker. | + | # cat /usr/lib/systemd/system/docker.ser[[vi]]ce |
[Unit] | [Unit] | ||
| − | Description=Docker Application Container Engine | + | Description=[[Docker]] Application Container Engine |
Documentation=http://docs.docker.io | Documentation=http://docs.docker.io | ||
After=network.target | After=network.target | ||
| − | + | [[R]]equires=docker.socket | |
[Service] | [Service] | ||
Type=notify | Type=notify | ||
| − | + | En[[vi]]ronmentFile=-/etc/sysconfig/docker | |
ExecStart=/usr/bin/docker -d --selinux-enabled -H fd:// | ExecStart=/usr/bin/docker -d --selinux-enabled -H fd:// | ||
| − | + | [[R]]estart=on-failure | |
LimitNOFILE=1048576 | LimitNOFILE=1048576 | ||
| − | + | LimitNP[[R]]OC=1048576 | |
[Install] | [Install] | ||
| 83行目: | 83行目: | ||
===サービスの確認=== | ===サービスの確認=== | ||
| − | # systemctl status docker. | + | # systemctl status docker.ser[[vi]]ce |
| − | docker.service - Docker Application Container Engine | + | docker.service - [[Docker]] Application Container Engine |
| − | Loaded: loaded (/usr/lib/systemd/system/docker. | + | Loaded: loaded (/usr/lib/systemd/system/docker.ser[[vi]]ce; enabled) |
Active: active (running) since 日 2014-07-13 23:04:55 JST; 30min ago | Active: active (running) since 日 2014-07-13 23:04:55 JST; 30min ago | ||
Docs: http://docs.docker.io | Docs: http://docs.docker.io | ||
Main PID: 3072 (docker) | Main PID: 3072 (docker) | ||
| − | CGroup: /system.slice/docker. | + | CGroup: /system.slice/docker.ser[[vi]]ce |
└─3072 /usr/bin/docker -d --selinux-enabled -H fd:// | └─3072 /usr/bin/docker -d --selinux-enabled -H fd:// | ||
| 104行目: | 104行目: | ||
===再起動=== | ===再起動=== | ||
| − | # systemctl restart docker. | + | # systemctl restart docker.ser[[vi]]ce |
===設定の再読み込み=== | ===設定の再読み込み=== | ||
# systemctl reload [サービス] | # systemctl reload [サービス] | ||
| − | <blockquote> | + | <blockquote>該当のser[[vi]]ceがreloadオプションに対応している必要あり</blockquote> |
=====例===== | =====例===== | ||
| − | *start/reloadの際に実行されるコマンドが指定されています(「ExecStart= | + | *start/reloadの際に実行されるコマンドが指定されています(「ExecStart=」、および「Exec[[R]]eload=」オプション) |
[Service] | [Service] | ||
| − | + | En[[vi]]ronmentFile=/etc/sysconfig/sshd | |
ExecStartPre=/usr/sbin/sshd-keygen | ExecStartPre=/usr/sbin/sshd-keygen | ||
ExecStart=/usr/sbin/sshd -D $OPTIONS | ExecStart=/usr/sbin/sshd -D $OPTIONS | ||
| − | + | Exec[[R]]eload=/bin/kill -HUP $MAINPID | |
| − | ===chkconfig/serviceコマンドとの共存=== | + | ===[[chkconfig]]/serviceコマンドとの共存=== |
| − | /etc/init.d/ | + | /etc/init.d/以下に旧来のサービススクリプトがある場合、そちらを[[chkconfig]]/serviceコマンドで操作することも可能です。CentOS7では、次のサービスはsystemdに移行せずに残っています。 |
| − | # chkconfig --list | + | # [[chkconfig]] --list |
注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。 | 注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。 | ||
| − | systemd | + | systemd ser[[vi]]ces. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。 |
systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。 | systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。 | ||
特定のターゲットにおいて有効化されているサービスを確認するには、 | 特定のターゲットにおいて有効化されているサービスを確認するには、 | ||
| 133行目: | 133行目: | ||
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off | network 0:off 1:off 2:on 3:on 4:on 5:on 6:off | ||
| − | <blockquote>/etc/init.d/ | + | <blockquote>/etc/init.d/以下にスクリプトがないサービスに対して、[[chkconfig]]/serviceコマンドを実行した場合は、自動的に対応するsystemctlコマンドが発行されます。</blockquote> |
===各フェーズにおける起動時間=== | ===各フェーズにおける起動時間=== | ||
| 140行目: | 140行目: | ||
===仮想環境種類の判別=== | ===仮想環境種類の判別=== | ||
| − | # systemd-detect- | + | # systemd-detect-[[vi]]rt |
microsoft | microsoft | ||
2020年2月16日 (日) 04:33時点における最新版
目次
Systemd
Linux |
- https://fedoraproject.org/wiki/Systemd
- http://d.hatena.ne.jp/enakai00/20130914/1379146157
- http://alpha.mixi.co.jp/2013/12063/
<blockquote>Linuxの起動処理は、これまでinit/upstartと呼ばれる仕組みで行われていました。Red Hat Enterprise Linux 7 (RHEL7)では、これが、systemdと呼ばれるまったく新しい仕組みに置き換わります。</blockquote>
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/ 配下の設定ファイルを確認
<blockquote>、runlevel 5に相当する「graphical.target」に対しては、「multi-user.target」が前提として定義されていますので、multi-user.targetで有効化されたserviceは、自動的にgraphical.targetでも有効化されます</blockquote>
例
- 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 [サービス]
<blockquote>該当のserviceがreloadオプションに対応している必要あり</blockquote>
例
- 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
<blockquote>/etc/init.d/以下にスクリプトがないサービスに対して、chkconfig/serviceコマンドを実行した場合は、自動的に対応するsystemctlコマンドが発行されます。</blockquote>
各フェーズにおける起動時間
# systemd-analyze Startup finished in 390ms (kernel) + 7.498s (initrd) + 24.687s (userspace) = 32.576s
仮想環境種類の判別
# systemd-detect-virt microsoft
© 2006 矢木浩人