apt-get upgrade 将在命令行上运行,但不会从 cron bash 脚本运行

apt-get upgrade 将在命令行上运行,但不会从 cron bash 脚本运行

在命令行上运行以下命令可以正常工作

$sudo apt-get update 

$sudo apt-get upgrade  
Reading package lists... Done  
Building dependency tree         
Reading state information... Done  
The following packages will be upgraded:  
  linux-libc-dev  
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.  
Need to get 0B/864kB of archives.  
After this operation, 0B of additional disk space will be used.  
Do you want to continue [Y/n]?  

但是使用 cron 运行该脚本......

#!/bin/bash  
source  /home/adm/.profile  
apt-get update >> /home/adm/update_detailed.log  
apt-get --yes upgrade >> /home/adm/update_detailed.log  
echo "Update_successful $(date)" >> /home/adm/update.log  

产生以下输出:

Reading package lists...  
Building dependency tree...  
Reading state information...  
The following packages will be upgraded:  
  linux-libc-dev  
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.  
Need to get 0B/864kB of archives.  
After this operation, 0B of additional disk space will be used.  

为什么 linux-libc-dev 包不能从 bash 脚本安装,但可以从命令行安装?请注意,该脚本设置为以超级用户身份运行。

该脚本已通过[1]和在线来源的验证。

我在 serverfault 上读过的问题提到了无人值守升级,但我想了解这个问题而不是使用替代方案。

在 [1] 中我读到,此类问题可能是由环境变量引起的。这就是我在脚本中添加 source /home/adm/.profile 行的原因。这并没有什么不同。

[1]Unix 和 Linux 系统管理手册,第 4 版,0-13-148005-7

答案1

您并不是第一个遇到此问题并发现它几乎无法使用的人。这就是为什么 Debian 多年来一直为此目的提供软件包的原因。它名为cron-apt

安装此包,然后通过编辑目录中的配置文件来配置它/etc/cron-apt默认配置文件有非常详尽的文档并且所有选项都应该有相当好的解释。

请注意,当你配置它以自动更新系统,你可能不应该这样做,因为它最终会破坏一些重要的东西。最好只是将其设置为在有更新时向您发送电子邮件。

相关内容