WSLは起動時にサービスを実行します。

WSLは起動時にサービスを実行します。

これがWSLの問題なのか、Ubuntuに問題があるのか​​正直にはわかりませんが、WSLシステムの起動時にcronサービスを実行することはできません。

うまく始まります:

sudo service cron start

ただし、次回以降も起動時に起動しません。

sudo update-rc.d cron defaults
sudo update-rc.d cron enable

バージョン:

$ uname -a
Linux PC-01 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

ベストアンサー1

今質問した他の質問の潜在的な「重複」を検索している間に見つけたばかりの古い質問です。 「wsl start services」の最初の検索結果なので、ここに答えを入力します。

一つある現在の答えて未来回答(現在利用可能なWSL Windows 10/11プレビュー基準)

現在の答えは、WSLには「サービスの開始」という概念がないということです。 Microsoftのinitプロセスは、「一般的な」Linuxシステムのように、SysVinitもSystemd initでもありません。

サービスを自動的に開始するには、次のものがあります。これを達成するには2つの方法があり、3番目の方法は次のWSLバージョンで利用できます。


  • オプション1:起動時ではなくログイン時に実行されるようにWindowsスケジュールジョブを設定する:

    • ジョブは「基本ジョブ」であってもよい。
    • 「プログラムの開始」
    • 「計画」はwsl.exe
    • そして「主張」は次のようにする必要があります-u root service cron start

    これにより、サービスの開始に必要なWSLが実行され、rootとしてログインしている間にコマンドが実行されますservice cron start。もちろん、init.dスクリプトを使用してすべてのサービスを実行するように変更できます。 Windowsの起動時にジョブが実行されるようにスケジュールする場合、この方法は(少なくとも今では)機能しません。 WSLは、プロセスをバックグラウンドで実行し続けるには、ユーザーがログインする必要があるように見えるためです。


  • オプション2:シェルの起動を変更してサービスが実行されていることを確認し、必要に応じて起動します。

    起動時に~/.bashrc(通常)次の行を追加します。

    wsl.exe -u root sh -c "service cron status || service cron start"
    

    「一般」Linuxでは、visudoパスワードなしでコマンドを実行する(またはログインするたびにパスワードを入力するために)権限が必要であり、自分に権限を付与する必要があります。wsl.exe -u root以下で使用以内にWSLを使用すると、これをバイパスできます。


  • オプション3: Windows 11の新機能は、この/etc/wsl.confファイルを使用してWSLの起動操作を指定する機能です。 Windows 11を使用している場合は、次の行を使用してファイルを作成します。

    [boot]
    command="service cron start"
    

    ~によるとマイクロソフト文書、WSLインスタンスの起動時にrootとしてコマンドを実行します。

    WSLの起動時に複数のコマンドを実行する必要がある場合は、command同じ行からセミコロンで区切ります。

    [boot]
    command="service ssh start; service cron start"
    

おすすめ記事