IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第23回 サービスの機能を試してみよう (宮崎悟) 2020年10月

前回は、Ubuntu20.04、WSLとWSL2を使用できるWindows Terminal 、WSL2でサービスを起動する方法を説明しました。今回は前回説明したサービスについて説明します。

サービスとは

Linuxにおけるサービスは、bashなどのシェルを通さずにシステムが直接起動するプロセスの総称です。使い魔の意味で、デーモン(daemon)とも呼ばれます。現在サポートされているUbuntuでは、16.04以降のバージョンがサービスをコントローするためにsystemdを使用します。systemd自体もサービスを管理するサービスで、スーパーサービスと呼ばれます。

systemdの状況確認や、サービスの操作をする際にはsystemctlコマンドを使用します。

現在のサービスの確認

現在の状態を確認するため、systemctl statusコマンドを実行します。

$ systemctl status
● DESKTOP-wsl
    State: degraded
     Jobs: 0 queued
   Failed: 1 units
    Since: Sun 2020-09-06 19:38:37 JST; 19s ago
   CGroup: /
           ├─init.scope
           │ └─25 systemd
           └─system.slice
             ├─irqbalance.service
             │ └─346 /usr/sbin/irqbalance --foreground
             ├─systemd-networkd.service
             │ └─98 /lib/systemd/systemd-networkd
             ├─systemd-udevd.service
             │ └─93 /lib/systemd/systemd-udevd
             ├─cron.service
             │ └─363 /usr/sbin/cron -f
             ├─polkit.service
             │ └─405 /usr/lib/policykit-1/polkitd --no-debug
             ├─networkd-dispatcher.service
             │ └─347 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
             ├─accounts-daemon.service
             │ └─342 /usr/lib/accountsservice/accounts-daemon
             ├─systemd-journald.service
             │ └─68 /lib/systemd/systemd-journald
             ├─atd.service
             │ └─370 /usr/sbin/atd -f
             ├─unattended-upgrades.service
             │ └─404 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
             ├─ssh.service
             │ └─401 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
             ├─snapd.service
             │ └─349 /usr/lib/snapd/snapd
             ├─rsyslog.service
             │ └─348 /usr/sbin/rsyslogd -n -iNONE
             ├─systemd-resolved.service
             │ └─336 /lib/systemd/systemd-resolved
             ├─dbus.service
             │ └─343 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
             ├─systemd-timesyncd.service
             │ └─337 /lib/systemd/systemd-timesyncd
             ├─system-getty.slice
             │ └─getty@tty1.service
             │   └─399 /sbin/agetty -o -p -- \u --noclear tty1 linux
             └─systemd-logind.service
               └─351 /lib/systemd/systemd-logind

以下のプロセスツリーを見るとわかるように、各サービスはsystemd から起動されます。

$ pstree
init─┬─init───unshare───systemd─┬─accounts-daemon───2*[{accounts-daemon}]
     │                          ├─agetty
     │                          ├─atd
     │                          ├─cron
     │                          ├─dbus-daemon
     │                          ├─irqbalance───{irqbalance}
     │                          ├─networkd-dispat
     │                          ├─polkitd───2*[{polkitd}]
     │                          ├─rsyslogd───3*[{rsyslogd}]
     │                          ├─snapd───35*[{snapd}]
     │                          ├─sshd
     │                          ├─systemd-journal
     │                          ├─systemd-logind
     │                          ├─systemd-network
     │                          ├─systemd-resolve
     │                          ├─systemd-timesyn───{systemd-timesyn}
     │                          ├─systemd-udevd
     │                          └─unattended-upgr───{unattended-upgr}
     ├─init───init─┬─bash───pstree
     │             └─ssh-agent
     └─{init}

特定のサービスの確認は、サービス名を指定してsystemctl statusを実行します。

$ systemctl status irqbalance.service
● irqbalance.service - irqbalance daemon
     Loaded: loaded (/lib/systemd/system/irqbalance.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-09-06 19:38:38 JST; 25min ago
       Docs: man:irqbalance(1)
             https://github.com/Irqbalance/irqbalance
   Main PID: 322
      Tasks: 2 (limit: 123550)
     Memory: 2.6M
     CGroup: /system.slice/irqbalance.service
             └─322 /usr/sbin/irqbalance --foreground
 9月 06 19:38:38 DESKTOP-wsl systemd[1]: Started irqbalance daemon.
新しいサービスの追加

筆者の環境では、ssh.serviceを起動しています。言うまでもありませんが、sshはターミナル間をセキュアに接続するサービスです。標準ではsshサーバーがインストールされていません。そのため、以下のようにパッケージを追加します。

$ sudo apt install -y openssh-server

インストール時に、ssh.serviceが起動されます。

$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-09-06 19:38:38 JST; 26min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 342 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 377
      Tasks: 1 (limit: 123550)
     Memory: 7.1M
     CGroup: /system.slice/ssh.service
             └─377 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
 9月 06 19:38:38 DESKTOP-wsl systemd[1]: Starting OpenBSD Secure Shell server...
 9月 06 19:38:38 DESKTOP-wsl sshd[377]: Server listening on 0.0.0.0 port 22.
 9月 06 19:38:38 DESKTOP-wsl sshd[377]: Server listening on :: port 22.
 9月 06 19:38:38 DESKTOP-wsl systemd[1]: Started OpenBSD Secure Shell server.

サービスの停止/開始など、以下の操作はroot権限で行います。

  • サービス開始 systemctl start サービス名
  • サービス停止 systemctl stop サービス名
  • サービス再起動 systemctl restart サービス名
  • サービスリロード(設定ファイルの再読み込み。サービスにコマンドが設定されていなければ無効) systemctl reload サービス名
  • サービス有効化(systemd起動時にサービス起動する) systemctl enable サービス名
  • サービス無効化(systemd起動時にサービス起動しない) systemctl disable サービス名
既存のサービスの確認

サービスには、初期値では無効化されているものもあります。有効なサービスはsystemctl statusで確認することができますが、有効・無効すべてのサービスを確認するには、systemctl list-unit-filesを使用します。

$ systemctl list-unit-files
UNIT FILE                              STATE           VENDOR PRESET
proc-sys-fs-binfmt_misc.automount      static          enabled
-.mount                                generated       enabled
dev-hugepages.mount                    static          enabled
dev-mqueue.mount                       static          enabled
proc-sys-fs-binfmt_misc.mount          disabled        enabled
snap-core18-1880.mount                 enabled         enabled
snap-core18-1885.mount                 enabled         enabled
snap-lxd-16889.mount                   enabled         enabled
snap-lxd-16926.mount                   enabled         enabled
snap-snapd-8542.mount                  enabled         enabled
snap-snapd-8790.mount                  enabled         enabled
sys-fs-fuse-connections.mount          static          enabled
sys-kernel-config.mount                static          enabled
sys-kernel-debug.mount                 static          enabled
sys-kernel-tracing.mount               static          enabled
apport-autoreport.path                 enabled         enabled
systemd-ask-password-console.path      static          enabled
systemd-ask-password-plymouth.path     static          enabled
systemd-ask-password-wall.path         static          enabled
accounts-daemon.service                enabled         enabled
apparmor.service                       enabled         enabled
apport-autoreport.service              static          enabled
apport-forward@.service                static          enabled
apport.service                         generated       enabled
apt-daily-upgrade.service              static          enabled
apt-daily.service                      static          enabled
atd.service                            enabled         enabled
autovt@.service                        enabled         enabled
blk-availability.service               enabled         enabled
bolt.service                           static          enabled
cgroupfs-mount.service                 masked          enabled
cloud-config.service                   enabled         enabled
cloud-final.service                    enabled         enabled
cloud-init-local.service               enabled         enabled
cloud-init.service                     enabled         enabled
console-getty.service                  disabled        disabled
console-setup.service                  enabled         enabled
container-getty@.service               static          enabled
containerd.service                     disabled        enabled
cron.service                           enabled         enabled
(後略)

UNIT FILEがサービス名、STATEが現在のステータス、VENDOR PRESETが初期値になります。各ステータスの値の意味は以下のとおりです。

ステータス 意味
enabled サービスが有効化されている
disabled サービスが無効されている
static サービスが有効になることがない
masked サービスが完全に無効化されており、起動操作が失敗する
generated サービスがジェネレータツールを使って動的に生成され、暗黙的に有効化された

ステータスには他の値もありますが、ここでは省略します。コマンドsystemctl start サービス名を使用することで、現在disabled になっているサービスを起動することが可能です。

systemctl list-unit-filesコマンドでは、サービスで開けでなく、socket・ target・timerなどもあります。socketはUNIX socket通信で概ねサービスと紐付いています。targetはマシンの状態を指します。WSLではあまり使用しないと思います。timer は定期的にプロセスを起動するサービスとなります。

終わりに

今回は、サービスについて簡単に説明しました。WSL2から動作するようになったサービスですが、多くのLinuxでも使われているものです。サービスを使用することで、WSL上でWebサービスやアプリケーションサーバを起動することが可能になります。これらについては、後日説明の機会があると思います。次回は、WSL2で変わったネットワークについて説明します。次回をお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes