CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、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 サービス名
systemctl enable サービス名
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