update.shを次のように作成しました。
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
echo "Updated Successfully!
毎時間このスクリプトを実行するために、次のcrontabジョブを作成しました。
0 * * * * bash /home/ubuntu/update.sh >> /home/ubuntu/cron_test.txt
しかし、echoコマンドのログファイルエントリのみが生成され(1分ごとに実行しようとするため)、私のbashが更新されているという確認はありません。私はWSL2とVMWare Ubuntu端末の両方でこれを試しました。 WSLはエコー実行エントリも記録しません。何が問題なのでしょうか?
答え1
2つの質問があります。
これは
sudo
、パスワードの入力を求められ、パスワードは提供されないことを意味します。だからちょうどそこにぶら下がるでしょう。簡単な解決策は、rootを使用するcron
か、sudo crontab -e
rootユーザーにエントリを追加することによって/etc/cron.crontab
。sudo
aptコマンド自体も、実行時にインストールを確認する必要があることを示すメッセージを表示します
apt upgrade
。を実行してこの問題を解決することもできますapt upgrade -y
。
今、上記の「解決策」のどれも良くありません。代わりに、次のいずれかを使用しないでください。無人アップグレードのインストール、これを行うように設計されたツールを使用できます。
答え2
いくつかの問題に直面しています。どちらもデフォルトでSystemdを実行しているWSLにルーティングしています(または簡単ではありません)。この内容は記事で詳しく説明します。Ubuntuの回答を尋ねるもう一つ根したがって、ここではこの問題について深く議論しません。
しかし、Systemdがない場合:
unattended-upgrades
コメントやその他の回答で提案された機能は機能しません。cron
通常、UbuntuでもSystemdによって起動されるため、別の方法で起動する必要があります。あなたの意見に基づいて:エコー実行項目も記録しません。
cron
... WSLで予想されるものはまったく実行されていないようです。
ただし、考えられる解決策を提案する前に、WSLインスタンスはこれを行わないでください。 WSL インスタンスは、長期間実行される常時実行環境として設計されていません。ディストリビューションを実行しているDockerコンテナに似ています。だから私は常にバックグラウンドでアップグレードの中断が発生することを心配しています。ホストオペレーティングシステムwsl --shutdown
(またはホストオペレーティングシステム)または--terminate
さまざまな要因を含むさまざまな要因の1つが、バックグラウンド/無人アップグレード中にWSLインスタンスを停止する可能性があります。
物理/仮想マシンでは、次のunattended-upgrade-shutdown
ことができます。無人アップグレードが完了するまでシャットダウンを無効にします。。しかし、これはWSLでは不可能です。つまり、Aptデータが破損しやすくなります。
apt upgrade
これはプロセスで実行されたときにも発生しますcron
。
ただ手動で実行することをお勧めしますsudo apt update && sudo apt upgrade -y
。デフォルトのMOTDは必要に応じてある程度警告します。
WSLで実行している場合は、cron
いくつかの異なる方法で自動化を達成できます。推奨される方法は、boot.command
利用可能な構成設定を持つWindows 11です。
Windows 10を使用している場合は、次の項目に追加できます~/.bashrc
。
wsl.exe -u root service cron status > /dev/null || wsl.exe -u root service cron start > /dev/null
このwsl.exe
コマンドを使用して、パスワードなしでrootとして実行します。
よりこのスーパーユーザーの答えそこで、2つの技術をさらに詳しく説明します。