ホーム テクノロジー LINUX Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

現在、ほとんどの Linux ディストリビューションのデフォルトのシステムおよびサービス マネージャーは systemd です。

systemd プロセスは SysV init を置き換えます。これはカーネル起動後の最初のプロセスとして実行され、Linux ホストを使用可能な状態にする役割を果たします。サービスの開始と管理、ファイルシステムのマウント、ハードウェアの管理、ログインプロンプトの生成などを担当します。

SysV に対する主な利点は、systemd ができるだけ多くのサービスを並行して開始するため、起動プロセスが高速化され、ログイン画面がより速く表示されることです。

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?
Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

単位

systemd によって管理される項目はユニットと呼ばれます。ユニット ファイルは /lib/systemd/ system にあります。

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?
Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

サービスユニット

サービス管理の場合、ターゲット ユニットはサービス ユニットであり、サフィックス .service が付いたユニット ファイルが含まれます。

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?
Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

systemd サービスの管理

systemd ユニットを管理するコマンドは systemctl です。

サービスの開始と停止

systemd サービスを開始するには、systemctl start コマンドを使用します。

 $ sudo systemctl start name.service

.service サフィックスはそのままにすることができます。たとえば、Ubuntu で Apache サーバーを起動するには:

 $ sudo systemctl start apache2

実行中のサービスを停止するには:

$ sudo systemctl stop name.service

したがって、Ubuntu で Apache サーバーを停止するには、次のようにします。

 $ sudo systemctl stop apache2

サービスの再起動とリロード

実行中のサービスを再起動するには、restart コマンドを使用します。

 $ sudo systemctl restart name.service

構成ファイルのリロードのみが必要な場合

$ sudo systemctl reload name.service

サービスの有効化と無効化

システム起動時にサービスを自動的に開始したい場合は、enable コマンドを使用します。

 $ sudo systemctl enable name.service

システム起動時にサービスが開始されないようにするには:

 $ sudo systemctl disable name.service

無効にしても、実行中のサービスは停止されません。

サービスステータスの表示

サービスに関する情報を表示するには:

 $ sudo systemctl status name.service

これにより、サービスのステータスとログ ファイルの最初の数行が表示されます。したがって、サービスの実行中の出力は次のようになります。

 sudo 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 Tue 2020-05-19 22:11:36 UTC; 4 days ago
  Process: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 104165 (apache2)
    Tasks: 55 (limit: 1024)
   CGroup: /system.slice/apache2.service
           ├─104165 /usr/sbin/apache2 -k start
           ├─116006 /usr/sbin/apache2 -k start
           └─116007 /usr/sbin/apache2 -k start

May 19 22:11:36 ubuntu18 systemd[1]: Starting The Apache HTTP Server...
May 19 22:11:36 ubuntu18 systemd[1]: Started The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloaded The Apache HTTP Server.
May 22 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.

サービスがアクティブかどうかを確認するには:

$ sudo systemctl is-active name.service

したがって、apache2 サービスの実行中、systemctl is-active コマンドの出力は次のようになります。

 $ sudo systemctl is-active apache2
active

サービスが有効かどうかを確認するには:

$ sudo systemctl is-enabled name.service.

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?
Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

システム状態の表示

これまで見てきたすべてのコマンドは、単一のサービスを管理するために使用されます。システム状態の概要が必要な場合は、次の一連のコマンドを使用します。

すべてのユニットタイプを表示するには

$ sudo systemctl -t help
 Available unit types:
service
socket
target
device
mount
automount
swap
timer
path
slice
scope

インストールされているすべてのユニットをリストするには、list-unit-files を使用します。

 $ sudo systemctl list-unit-files
 UNIT FILE                              STATE          
proc-sys-fs-binfmt_misc.automount      static         
-.mount                                generated      
boot-efi.mount                         generated      
dev-hugepages.mount                    static         
dev-mqueue.mount                       static         
mnt.mount                              generated      
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        
apport-autoreport.path                 enabled        
systemd-ask-password-console.path      static         
systemd-ask-password-plymouth.path     static         
systemd-ask-password-wall.path         static         
session-161.scope                      transient      
accounts-daemon.service                enabled        

出力には、Unit File と State の 2 つの列のみがあります。通常、状態は有効、無効、静的、またはマスクされます。

  • 静的 : これは、ユニットを有効にできない、1 回限りのアクションを実行する、または別のユニットの依存関係にあり、単独で実行できないことを意味します。
  • マスク済み: マスク済みとしてリストされているユニットは、 /dev/null にリンクされているため、完全に起動できないことを意味します これをユニットのマスキングといいます。これにより、手動または自動でサービスが開始されなくなります。

インストールされているすべてのサービスをリストする

systemctl list-unit-files コマンドに -t または –type サービス フィルターを指定すると、インストールされているサービスの状態のみが表示されます。

 $ sudo systemctl list-unit-files -t service
UNIT FILE                              STATE    
accounts-daemon.service                enabled  
acpid.service                          disabled 
apache-htcacheclean.service            disabled 
apache-htcacheclean@.service           disabled 
apache2.service                        enabled  
apache2@.service                       disabled 
apparmor.service                       enabled  
apport-autoreport.service              static   
apport-forward@.service                static   
apport.service                         generated
apt-daily-upgrade.service              static   
apt-daily.service                      static   
atd.service                            enabled  
autovt@.service                        enabled  
blk-availability.service               enabled  
bootlogd.service                       masked   
bootlogs.service                       masked   

すべてのアクティブなサービス ユニットを表示するには、list-units を -t サービス フィルターとともに使用します。

 $ sudo systemctl list-units -t service
UNIT                                 LOAD   ACTIVE SUB     DESCRIPTION                             
  accounts-daemon.service              loaded active running Accounts Service                        
  apache2.service                      loaded active running The Apache HTTP Server                  
  apparmor.service                     loaded active exited  AppArmor initialization                 
  apport.service                       loaded active exited  LSB: automatic crash report generation  
  atd.service                          loaded active running Deferred execution scheduler            
  blk-availability.service             loaded active exited  Availability of block devices           
  cloud-config.service                 loaded active exited  Apply the settings specified in cloud-con
  cloud-final.service                  loaded active exited  Execute cloud user/final scripts        
  cloud-init-local.service             loaded active exited  Initial cloud-init job (pre-networking) 
  cloud-init.service                   loaded active exited  Initial cloud-init job (metadata service 
  console-setup.service                loaded active exited  Set console font and keymap             
  cron.service                         loaded active running Regular background program processing dae

出力には次の列があります。

  • UNIT : systemd サービスユニット名
  • LOAD : ユニット定義が正しく読み取られ、ロードされたかどうかを示します。
  • ACTIVE : ユニットがアクティブかどうかを示します。
  • SUB : ユニットの低レベルのアクティブ化状態。ユニットに関するより詳細な情報が得られます。これはユニットの種類によって異なります。
  • DESCRIPTION : サービスユニットの説明。

結論

この記事で、systemctl を使用して Linux 上でサービスを管理する方法について理解していただければ幸いです。さらに詳しく知りたい場合は、この Linux マスター コース をご覧ください。

Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?
Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?

「 Systemctl を使用して Systemd サービスを管理するにはどうすればよいですか?」についてわかりやすく解説!絶対に観るべきベスト2動画

今更聞けないsystemd入門 (nasa9084) – builderscon tokyo 2019
systemctl とjournalctl を使用して Linux サービスを管理する方法 |システム管理者の基本