これが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"
答え2
この投稿は私が望むものを得るのに役立ちましたが、複数のコマンド(xrdpの起動、eth0 mtuの調整、resolv.confの更新)を実行する必要があり、複数回実行すると複数のルートログインがwsl.exe
インスタンス化され、ファイルロックが発生します。いくつかの問題があります。resolv.conf
それはおそらくWSLによるものです。ログインするたびに何かを設定しますが、肯定的ではありません。
私はwsl2カーネルバージョンの5.10.102.1 Windows 10とUbuntu 20.04.5 LTSを使用しています。私の必要性
- xrdpを起動します(GUIセッションに接続できるように)。
- eth0 mtuを1350に設定します(WSLはmtuのためにVPNを使用するときに接続に問題があります)。
- アップストリームリゾルバを使用して更新されます(
resolv.conf
inに関係なくWSLを介して継続的に更新されます)generateResolvConf = false
wsl.config
だから私がしたことは@NotTheDr01dsの答えを拡張したことです。
.mystartup.sh
すべてのコマンドをホームディレクトリの新しいシェルスクリプトに入れます。.mystartup.sh
ルートとして呼び出す.profile
私が追加したものです.profile
# startup stuff
# run startup script as root
wsl.exe -u root /home/user/.mystartup.sh
これは.mystartup.sh
# startup stuff
# service xrdp start
service xrdp status || service xrdp start
# setup lower mtu for vpn links
ifconfig eth0 mtu 1350
echo "eth0 mtu updated!"
# remove link to /run/resolvconf/resolv.conf & create new
rm -f /etc/resolv.conf
touch /etc/resolv.conf
chmod u+rwx,g+rwx,o+rx /etc/resolv.conf
# setup nameservers
echo "# this resolv.conf created using user .profile script" >> /etc/resolv.conf
echo "# wsl auto-generate must be disabled in /etc/wsl.config" >> /etc/resolv.conf
echo "nameserver 10.0.0.50" >> /etc/resolv.conf
echo "nameserver 10.0.0.51" >> /etc/resolv.conf
echo "resolv.conf modified with custom dns resolvers!"
echo