Microsoftがsystemdを宣伝している場合、なぜSystem Vを使用してUbuntu 18.04 LTS WSLでサービスを再起動するのですか? [閉鎖]

Microsoftがsystemdを宣伝している場合、なぜSystem Vを使用してUbuntu 18.04 LTS WSLでサービスを再起動するのですか? [閉鎖]

昨日はWSLでapache2サーバーを再起動する必要がありましたが、驚いたことにsystemctlUbuntuのように使用できませんでした。代わりにsudo /etc/init.d/apache2 restart

しかし、私の考えでは、Lennart PoetteringはMicrosoftに関連しているようです。ここで何が起こっているのでしょうか?

答え1

タイトルと質問の間に解決すべきいくつかの質問と説明があります。

マイクロソフトがsystemdを強く押し込んだ場合

Lennart PoetteringがMicrosoftに接続されていると思いました。

コメントで指摘したように、MicrosoftとPoettering、MicrosoftとSystemdの間には何の関係もありません。

Ubuntuのように使用できないことに驚きましたsystemctl。代わりに sudo /etc/init.d/apache2 restart に戻す必要があります。

これはWSLで予想されます。 WSLの「欠けている部分」の1つは、代替PID1ハイパーバイザー(別名Systemd、公平に言えば他のいくつかの機能もあります)のサポートとして残ります。

WSL githubリポジトリでこれに関連する多くの質問を見つけることができますが、2つの主な質問は次のとおりです。

問題の鍵は、WSLが独自の/initプロセスを使用して、WindowsとLinux / WSLの間の相互運用性の大部分をブートストラップすることです。部分リストを作成しました。Ubuntuの回答に尋ねる

Systemdの全体設計(少なくともこれに関して)では、PID1が必要です。どのすべての機能がうまく動作します。

それ可能WSL2を使用して新しいPID名前空間を起動し、SystemdをPID1として使用し、名前空間を入力して関数を使用しsystemctlます。ただし、多くの警告も付属しています。

ただし、これを実際に表示するには(「一般的な使用」ではありません)、次の手順を実行します。

sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=basic.target
# Wait 10-20 seconds for things to start up
sudo -E nsenter --all -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"

でApacheを起動できるはずですsystemctl

これはいくつかの結果をもたらします。その他しかし、問題は次のとおりです。

  • SystemdがWSLハンドラを削除したため、Windowsの実行可能ファイルを実行できませんbinfmt_misc
  • WindowsパスはWSL2 / Linuxパスに追加されません。
  • systemd-tmpfilesソケットが削除され、Windows 11でWSLgが機能しない
  • 他の人

WSL2とSystemdが連携するように設計されたいくつかのサードパーティのスクリプト(Genie、WSL2Hacksなど)がありますが、本物ほとんどの場合は必要ありません。

ご覧のとおり、ほとんどのタスクでは単にinit.dスクリプトを使用できます(配布版に記載されている場合)。また、PID1 を必要としない Supervisord などの代替プロセス マネージャを使用することも検討できます。 Windows 11で自動的に実行され、必要な起動タスクを実行するように設定することもできます。

個人的には、WSLでSystemdではなくディストリビューションを使用してきました。dinitこれまで、プロセスマネージャを含むArtix(Archベースのディストリビューション)が非常に有望に見えます。

関連情報