我正在管理多台运行 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 作业中使用外部命令的完整路径始终是一个好习惯。