Cron、終了コード、ロギングを使用した自動更新スクリプト

Cron、終了コード、ロギングを使用した自動更新スクリプト

私は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-getcrons shell-searchpathにありますか?

cronジョブでは、常に外部コマンドのフルパスを使用することをお勧めします。

関連情報