10.7. サービスの管理中に考慮すべき事項

通常の操作時に、systemd は、ユニットの抽象化と、システムでアクティブな基本プロセスの関連付けを維持します。
From: man systemd
プロセスの systemd 生成は、プライベートの systemd 階層で属するユニットにちなんで名前が付けられる個々の Linux コントロールグループに配置されます (コントロールグループの詳細は cgroups.txt[1]、または短い「cgroup」を参照してください)。systemd はこれを使用して、プロセスを効果的に追跡します。制御グループ情報はカーネルで管理され、ファイルシステム階層 (/sys/fs/cgroup/systemd/ の下)、または ps(1)などのツール (ps xawf -eo pid、user、cgroup、args は、すべてのプロセスと、そのプロセスが属する systemd ユニットの一覧を表示するのに特に役立ちます。
cgroup 階層は、systemd のプロセスおよびサービスの健全性の表示に重要です。プロセスがそれ自体を分岐すると、プロセスは作成プロセスの cgroup を継承します。この場合は、特定のユニットに関連付けられているすべてのプロセスは、次のような適切な cgroup.procs ファイルの内容を読み取ることで検証できます。
~]# cat /sys/fs/cgroup/systemd/system.slice/httpd.service/cgroup.procs
11854
11855
11856
11857
11858
11859
この出力は、systemctl status unit 操作時に返される CGroup 情報と一致します。
~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-05-29 12:08:16 EDT; 45s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 11854 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─11854 /usr/sbin/httpd -DFOREGROUND
           ├─11855 /usr/sbin/httpd -DFOREGROUND
           ├─11856 /usr/sbin/httpd -DFOREGROUND
           ├─11857 /usr/sbin/httpd -DFOREGROUND
           ├─11858 /usr/sbin/httpd -DFOREGROUND
           └─11859 /usr/sbin/httpd -DFOREGROUND

May 29 12:08:16 localhost systemd[1]: Starting The Apache HTTP Server...
May 29 12:08:16 localhost systemd[1]: Started The Apache HTTP Server.
システム全体で、このようなプロセスの分類を直接表示するには、systemd-cgls ユーティリティーを使用できます。
~]# systemd-cgls | head -17
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
├─user.slice
│ └─user-0.slice
│   └─session-168.scope
│     ├─ 3049 login -- root
│     ├─11884 -bash
│     ├─11943 systemd-cgls
│     └─11944 head -17
└─system.slice
  ├─httpd.service
  │ ├─11854 /usr/sbin/httpd -DFOREGROUND
  │ ├─11855 /usr/sbin/httpd -DFOREGROUND
  │ ├─11856 /usr/sbin/httpd -DFOREGROUND
  │ ├─11857 /usr/sbin/httpd -DFOREGROUND
  │ ├─11858 /usr/sbin/httpd -DFOREGROUND
  │ └─11859 /usr/sbin/httpd -DFOREGROUND
  ├─rhnsd.service
systemd が適切に機能するには、サービスを systemd システムから起動または停止して、ユニットの分類に対して適切なプロセスを維持する必要があります。外部アクションを実行する操作を行うと、必要な cgroup 構造が作成されません。これは、systemd が、開始されるプロセスの特別な性質を認識しないために発生します。
上記の制約で、たとえば httpd サービスを停止し、/usr/sbin/httpd を直接実行すると、以下のようになります。
~]# systemctl stop httpd
~]# /usr/sbin/httpd
# systemd-cgls | head -17
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
├─user.slice
│ └─user-0.slice
│   └─session-168.scope
│     ├─ 3049 login -- root
│     ├─11884 -bash
│     ├─11957 /usr/sbin/httpd
│     ├─11958 /usr/sbin/httpd
│     ├─11959 /usr/sbin/httpd
│     ├─11960 /usr/sbin/httpd
│     ├─11961 /usr/sbin/httpd
│     ├─11962 /usr/sbin/httpd
│     ├─11963 systemd-cgls
│     └─11964 head -17
└─system.slice
  ├─rhnsd.service
  │ └─3261 rhnsd
httpd プロセスは、user-0.slice および a session-168.scope の下に表示されることに注意してください。このサービスは systemd が直接監視および管理する必要があるシステムサービスとは対照的に、ユーザーが開始したプロセスとして扱われます。この不整合により発生する可能性のある障害には次のものが含まれますが、これに限定されません。
  • システムのシャットダウンまたは再起動のイベント時に、サービスが適切にシャットダウンされません。
  • ユーザーのログアウト中に、SIGHUP や SIGTERM などの予期しない信号が配信されます。
  • Restart= ディレクティブがあるにも関わらず、失敗したプロセスが自動的に再起動しません。

注記

アプリケーションシャットダウンイベントが正常に行われないと、クライアント側の障害やデータ損失、ディスク上の破損などの多くのアプリケーション障害が発生することがあります。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。