WSL2でsystemctlが動かない時の対処法


◆WSL2でsystemctlが動かない

発生したエラー

$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

以下の状態になった際、systemctlが正常に動いていません。

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0    896   528 ?        Sl   15:51   0:00 /init

PID1のcommandがsystemdではなく/initになっている状態です。

◆解決方法

$sudo apt install git dotnet-runtime-3.1 daemonize
$git clone https://github.com/arkane-systems/genie.git

$cd genie
$make install
$genie -s

◆確認

$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.5  0.1 106868 11864 ?        Ss   17:30   0:01 systemd

◆起動時に解決する

以下を参考にしました。

if [ "`ps -eo pid,cmd | grep systemd | grep -v grep | sort -n -k 1 | awk 'NR==1 { print $1 }'`" != "1" ]; then
  genie -s
fi