私はDebian、Raspian、Mintを実行している複数のコンピュータを管理しています。一部のコンピュータでは、自動更新とアップグレードが必要です。これを行い、更新が成功したかどうかを記録するスクリプトドラフトを作成しました。
#!/bin/bash
captains_log=/home/jason/mission_control/captains.log
apt-get update;
if [ $? == 0 ]; then
apt-get upgrade -y;
if [ $? == 1 ]; then
echo `date`": Daily update failed" >> $captains_log
else
echo `date`": Daily update successful" >> $captains_log
fi
else
echo `date`": Daily update failed" >> $captains_log
fi
@daily
ルートで実行するスクリプトを設定しましたcrontab
。コマンドを手動で実行すると、必要に応じて実行されます。スクリプトの実行時にログはcron
成功しましたが、ソフトウェアは更新されませんでした。
誰が私がどこに間違っているのか教えてもらえますか?
答え1
推奨される方法はコマンドを使用することですunattended-upgrades
。設定は簡単です。
apt-get install unattended-upgrades
dpkg-reconfigure unattended-upgrades
これはcronスクリプトで目的の結果を得るために必要なすべてです。ホイールを再発明する必要はありません。
ゼロ以外の戻りコードは、スクリプトおよびその成功報告に関する限り、失敗と見なされます。スクリプトは 1 以外のすべてを成功として処理します。終了コードを手動で確認する必要はありませんif
。
if apt-get upgrade -y; then
echo "$(date): Daily update successful" >> $captains_log
else
echo "$(date): Daily update failed" >> $captains_log
fi
シェルで「コマンドが見つかりません」が発生すると、終了コード 127 が返されます。
答え2
apt-get
crons shell-searchpathにありますか?
cronジョブでは、常に外部コマンドのフルパスを使用することをお勧めします。