おそらくWSL ( LinuxのWindowsサブシステム)でsystemdを必要としないでしょう


最も人気のあるLinuxディストリビューションsystemd initシステムとして.それは起動、シャットダウン、サービスの監視、およびそんなに多くを制御するスイスアーミーナイフのようです.
Windows Subsystem for Linux (WSL) 独自の初期化チューンに合わせてダンスを行い、WSL上で動作しているdistrosはsystemdを使わず、従来のinitシステムを使用しません.
それで大丈夫です.
深呼吸しましょう.それは我々がよく知られていることのイメージで新しいソフトウェアを再作成しようとするのは簡単です.多くの場合、私たちのWSLの新しい“私はシステムのミス”ステージがあります.実際にはclever hacks WSL上で走るシステムソートを取得するには熱心な新来者はこれらの方法を変えるかもしれません.
スローダウン、パートナー.より良いツールを理解し、それに対してではなく、それを使用して作業してみましょう.
systemdは必要ありません.WSLではありません.

I don't hate systemd. This is not an article about systemd vs openrc vs sysvinit vs runit or other init system. Each are worth exploring if that is your thing. Collect them all!


私は、特に2つの技術がWSLに満足していると信じています.
  • 直接サービスを起動する方法の良い理解(initシステムでアンマネージ).
  • コンテナ容器の熟知
  • WSLを選択


    WSLで使用するLinuxディストリビューションに到着していないなら、多くのオプションがあります.
    どのようなディストリビューションを使用します.私はフェドラを使用し、私は非常にお勧めします.マイクロソフトストアで利用できない間、私は持っています.
    お気軽に調査して戻ってくる.
    または、the available distributions in the Microsoft Store .
    またはmanually download and install an available distribution .

    A prerequisite for all this: enable WSL on Windows.


    ここでの目標は、あなたが運転する“車両”を選択し、インストールし、あなたが望むサービスを起動すると進んでいます.

    SystemCTLスタートなしでWebサーバを起動する


    一旦あなたが快適であるDirecoを持っているならば、あなたはINITシステムなしで選択のあなたのサービスを始める方法を発見するために進むことができます.
    例として、これまで人気を走らせましょうnginx WSL上のバックグラウンドでのWebサーバー.systemdまたは他のinitシステムなしで.

    どのようなディストリビューションを使っても、パッケージマネージャを使ってnginxをインストールする必要があります.好きなものsudo apt install nginx ( UbuntuとDebian )またはdnf install nginx フェドラapk add nginx (高山)sudo zypper install nginx ( openSUSE ,おそらく).
    今すぐsystemdでそれを起動しましょう!
    $ systemctl start nginx
    System has not been booted with systemd as init system (PID 1). Can't operate.
    Failed to connect to bus: Host is down
    $
    
    私はそれがうまくいったと思った.
    はい、WSLはユニコーンです.しかし、それは我々を止めません.
    我々は始めることができて、Nginx自身を止めることができます.例えば、Fedoraでは特権のないユーザとして動作します.
    sudo nginx
    
    それはバックグラウンドで始まります.私は次に行くことができますhttp://localhost , Windows上のWebブラウザで、NGinxのデフォルトのランディングページを参照してください.
    WSLウィンドウを閉じます.ブラウザをリフレッシュします.はい、まだ走っています.
    別のWSLウィンドウを起動し、pgrep nginx . あなたは、彼らがまだ走っているので、いろいろなNGNXプロセスIDを見るべきです.
    サーバーを優雅に停止するには、次の手順に従います.
    sudo nginx -s quit
    
    今すぐあなたのブラウザのページがリロードされませんし、残っている実行中のプロセスがあります.
    もちろん走ることwsl --terminate my_distro PowerShellまたはCMDからもサーバーをシャットダウンします.用途wsl -l インストールしたWSLディストリビューションのすべての名前を確認します.
    nginxを使うのは単なる例です.例えばApacheと同じことをすることができますsudo httpd and sudo httpd -k graceful-stop .

    容器から学ぶ



    一方、Docker以降のコンテナは、リロード後に永続的ではない不変のイメージとして一般的になりましたが、WSLは対照的に、変更可能なコンテナを保持することができます.
    コンテナイメージは、技術的には独自のオペレーティングシステムですが、一般的に、私たちが一般的にOSの、initシステム、スケジュールされたジョブなどを考えて完全なオペレーティングシステムではありませんDocker Hub つのことを行う:単一のコマンドまたはサービスを起動します.彼らは確かにsystemdを必要としません.
    すべてのことを言う:これらの種類のコンテナから学ぶ.実際には、Dockerfile or entrypoint.sh または通常同様にサービスを起動するために使用されるコマンドを明らかにするでしょう.NGinxを起動する方法の不明な?見てみるofficial nginx Dockerfile , 下に向かってCMD が定義されている.
    コマンドが識別されると、コンテナで使用される既定のフラグが手がかりを与えることがあります.もちろん、nginx -h or httpd -h あなたのオプションの富が表示されます.

    実際にコンテナを使用します。


    コンテナのテーマに従って、なぜあなたが望むサービスを起動するコンテナを使用しないのですか?
    WSLのディストリビューションでコンテナを起動するためのカップルオプションがあります.つまり、WSLバージョン2を使用している場合です.WSL 1はコンテナで動作しません.
    私の好みはポッドマンを使うことです.

    Podman それはかなり実行中のイメージになるときDockerの置換のドロップです.それは支えられますRedHat そして、急速に成熟しています.私は、ポッドマンは、CGroup V 2、完全なロットなしコンテナ、およびKubernetesポッド定義などの最先端技術を採用していることに気がつきます.
    Podmanを使用する際の最初のステップはインストールして設定することです.これはハードではないが、少し優しい愛情のケアを必要としません.私は、ルートレス/スーパーユーザアクセスを必要としないで起動できるコンテナをサポートするように設定します.
    ポッドマンがインストールされ、設定されると、次のようなものがnginx Webサーバを起動しますindex.html カレントワーキングディレクトリのファイル):
    podman run --name nginx_service -p 8080:80 -v "$PWD":/usr/share/nginx/html:ro -d nginx
    
    上記で、コンテナのポート80がホストのポート8080にマップされるので、あなたはhttp://localhost:8080 Windowsで、あなたのindex.html サーブ.
    注意-d コンテナに「daemonized」を実行するよう指示するフラグつまり、バックグラウンドサービスとして.The --name オプションは重要な便宜です下記の理由を参照してください.
    コンテナを実行する
    podman ps
    
    サービスを停止する
    podman stop nginx_service
    
    コンテナの名前は便利ですか?
    もう一度起動します.
    podman start nginx_service
    
    下にあるイメージを更新するには( nginXの新しいバージョンがリリースされたときなど).
    podman pull nginx
    
    WSLセッションを終了して再起動すると、Windowsを完全に再起動することができますpodman start nginx_service そして、それをもう一度実行してください.あなたが本当にそれが去るならば.podman rm nginx_service 動作するはずです.その後、再利用する必要がある場合は再作成する必要があります.
    Dockerに精通しているなら、すべてのこれらのコマンドはかなり身近に見えるかもしれません.たとえそうであっても、あなたはたぶん知っていたいですthe documentation at podman.io および/または使用podman help 自由に.
    一言で言えば、Podmanは[ハブ. Docker . com ]、[ quay . io ]、および他のリポジトリから利用可能なコンテナイメージの生態系全体をもたらします.このように、多くのサービスが利用できます.その多くは問題なく、システム管理なしで実行されます.

    DockerもWSL 2上で動作します


    Docker システムや他のinitシステムにlaunch the Docker daemon , それは他の手段を通してそのサービスを起動することが可能です.一度dockerd を実行すると、それを使用することが可能ですdocker WSL 2内からのコマンド.
    Docker Desktop サポートWSL 2 backend それはかなりうまくいっている.
    また、興味があります.

    社説:WSLは何ですか?


    WSLはLinuxですので、かなりハッキングできます.がんばれ.サーバー、ゲーム、お好みのLinux GNOMEやKDEアプリ.
    それが価値があるもののために、しかし、私はWSLに最適なユースケース:ソフトウェア開発、およびLinuxコマンドライン体操に私の2セントを提供することがあります.データはPython、Webアプリケーション、ノード、bashスクリプト、ルビーユーティリティ、学習C、錆、ネオビムとの編集などの問題.私は狭いですか?コメントで知らせてください.
    繰り返しますが、他の何かのためにそれを使用し、それがうまく機能する場合、それは素晴らしいです.しかし、私のハンチは、自動起動に必要な長期的なサービスを持っている場合、または完全なLinux経験とWSLが不足するだけで、Windows上の仮想マシン(VM)を見たいかもしれませんHyper-V , VirtualBox , or VMware . 私は、あなたが本当にsystemdを必要とするならば、VMが最高の選択であるかもしれないと思っています.
    または、より良い、デュアルブート(またはWindowsを削除)とブートLinuxをラップトップまたはデスクトップに.正直、デスクトップ上のLinuxは至福です.
    WSLは私たちの主要なオペレーティングシステム(しばしば仕事関連の理由のための)としてWindowsを必要とする人々のために、そして、また、コマンドラインでLinuxを必要とします.
    必要なすべてのLinuxを持つことができます.
    私は会話を歓迎!どのように、私はこの記事を改善することができますか?下記のコメントを自由に使ってください.