これが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"