WSLでsystemctlが使えないときに試すこと

こんにちは。今回はWSLでsystemctlが使えないとき、解決するために試すことをご紹介します。

systemctlでエラー

以下のようなエラーが出た場合の解決策になります。

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

wsl.confでsystem.dを有効化する

/etc/wsl.confがない場合は作成し、以下の設定を書き込みます。

[boot]
systemd=true

再起動するとsystemctlが使えるようになります。

使えるようにならない場合は、WSLやディストリビューションのバージョンが古く、system.dに対応していない可能性がありますので、さらに以下の可決策を実行してください。

WSLをアップデート

windowsでコマンドプロンプトを開き、次のコマンドでwslをアップデートします。

wsl --update

アップデート後にWSLを起動し、systemctlコマンドが使えるか試してみます。

ディストリビューションのバージョンアップ

ディストリビューションのバージョンが1の場合は2にバージョンアップします。現在のバージョンを確認するには以下のコマンドを使います。windowsのコマンドプロンプトでコマンドを実行します。

wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         1

VERSIONの下に現在のバージョンが表示されます。

バージョンアップするには以下のコマンドです。

wsl --set-version Ubuntu 2

コマンドライン引数にディストロ名とバージョンを指定します。バージョンアップは数分ほどで完了します。