使用 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在 root 中运行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

当 shell 出现“未找到命令”时,将返回退出代码 127。

答案2

是否apt-get在 crons shell-searchpath 中?

在 cron 作业中使用外部命令的完整路径始终是一个好习惯。

相关内容