个人工具

UbuntuHelp:AutoWeeklyUpdateHowTo/zh

来自Ubuntu中文

跳转至: 导航, 搜索


如何每周自动更新

使用cron-apt自动更新软件包

软件包cron-apt被设计为自动更新软件包列表和下载已更新的软件包。因此,它主要使用命令

apt-get upgrade

apt-get dist-upgrade -d

安装cron-apt

你可以从Universe Repositories得到cron-apt。

使cron-apt定期运行

为了使cron-apt定期地运行,创建一个到/etc/cron.daily或者/etc/cron.weekly的链接

sudo ln -s /usr/sbin/cron-apt /etc/cron.daily

cron-apt只下载新的软件包,你需要手动运行来安装它们

sudo apt-get dist-upgrade


* 如果是使用cron-apt,你不需要参照如下步骤。


使用cron和apt-get每周自动升级软件包

警告:就任何的系统变化,都有可能发生新的或附加错误。请确保备份你的数据和设置!由自己承担使用本文档的後果。定期更新你的Ubuntu(或基于Debian)的软件包有助于加强系统安全性以及排除系统运行漏洞。这份HOWTO指南介绍了如何在你的系统上安装cron job来每周更新你的系统以及删除任何安装後不曾使用的软件包。这份文档假设你的系统基于最普遍或最常见的宽带环境,不是拨号上网、Internet连接。

新建周期性cron Job文件

首先你需要新建cron job文件。你可以使用简单的文本编辑器创建并保存到你的主文件夹。在Ubuntu系统中,打开应用程序>附件>文本编辑器。在编辑器中,输入下列内容:

#!/bin/bash
apt-get update
apt-get upgrade -y
apt-get autoclean

然後保存文件并以类似于“autoupdt”命名。默认文件夹应该是你的主文件夹,但请确认一下。(下面的步骤假设该文件保存在你的主文件夹。)

移动Cron Job文件到Cron.Weekly

现在你已经创建了cron job文件,需要把它移动到cron weekly文件夹才能使它每周自动运行。为此,你需要打开命令行终端。在Ubuntu中,单击应用程序>系统工具>终端。现在你应该能看到终端提示符。在提示符处输入“ls”并按下回车键(某些键盘是返回键)。在列表中应该可以看到你新建的文件“autoupdt”。

user@system:~$cd ~
user@system:~$ls

现在我们已经确认文件存在,我们需要将它移动到正确的文件夹。在提示符後输入以下命令来移动文件:

user@system:~$sudo mv autoupdt /etc/cron.weekly

(你要正确输入你的sudo密码,也就是你的个人密码。)现在我们需要确认文件已被移至Cron文件夹。在提示符後输入:

user@system:~$cd /etc/cron.weekly
user@system:~$ls

你应该能在列表中看到“autoupdt”。(如果没有,再试一下先前的移动命令。)

使Cron Job文件可执行

现在文件已经创建并准备由cron每周运行,我们还需要使文件可执行使得它能被运行。因为你已经处于cron.weekly文件夹,你只需要输入一下命令:

user@system:~$sudo chmod 755 autoupdt

(你还需要再一次确认密码。)

完成

由于文件是可执行的,所以任务完成。cron job会每周运行并升级你的源列表(检查是否有可更新的软件包),发现并按需要升级软件包,然後清理旧的、安装後不曾使用的软件包。你仍旧可以使用新立得软件包管理器或命令apt-get,但现在你可以休息一下因为每周自动更新。

二选一:使用Aptitude记录软件包更新记录

Apt-get并不在记录文件内写下具体变化。如果postfix已安装,apptitude记录到/var/log/apptitude的内容可以发送邮件报告至系统管理员。如上面的例子,创建脚本/etc/cron.weekly/audoupdt并设置其为可执行:

#!/bin/bash

tmpfile=$(mktemp)

echo "aptitude update" >> ${tmpfile}
aptitude update >> ${tmpfile} 2>&1
echo "" >> ${tmpfile}
echo "aptitude dist-upgrade" >> ${tmpfile}
aptitude -y dist-upgrade >> ${tmpfile} 2>&1
echo "" >> ${tmpfile}
echo "aptitude clean" >> ${tmpfile}
aptitude clean >> ${tmpfile} 2>&1

mail -s "Aptitude cron $(data)" root < ${tmpfile}
rm -f ${tmpfile}

这里有一个有用的脚本(基于上面的)如果你没有安装sendmail或postfix。它记录所有aptitude的输出并手动通过你指定的邮件服务发送一封邮件。你必须指定收件人。同上面的例子,创建脚本/etc/cron.weekly/autoupde并使其可执行:

#!/bin/bash
#
# use aptitude to automatically install updates. log and email any
# changes.
#

#
# variables to change
#

# address to send results to
MAILTO=your@email.address
# host name of smtp server
MAIL=mail.yourisp.com

#
# script is below here (do not change)
#

tmpfile=$(mktemp)

#
# smtp setup commands
#

echo "helo $(hostname)" >> ${tmpfile}
echo "mail from: root@$(hostname)" >> ${tmpfile}
echo "rcpt to: $MAILTO" >> ${tmpfile}
echo 'data'>> ${tmpfile}
echo "subject: Aptitude cron $(date)" >> ${tmpfile}

#
# actually run aptitude to do the updates, logging its output
#

echo "aptitude update" >> ${tmpfile}
aptitude update >> ${tmpfile} 2>&1
echo "" >> ${tmpfile}
echo "aptitude dist-upgrade" >> ${tmpfile}
aptitude -y dist-upgrade >> ${tmpfile} 2>&1\echo "" >> ${tmpfile}
echo "aptitude clean" >> ${tmpfile}
aptitude clean >> ${tmpfile} 2>&1

#
# i get a lot of escaped new lines in my output. so the following
# removes them. this could be greatly improved

tmpfile2=$(mktemp)
cat ${tmpfile} | sed 's/\r\r/\n/g'|sed 's/\r//g' > ${tmpfile2}
mv ${tmpfile2} ${tmpfile}

#
# smtp close commands
#

echo >> ${tmpfile}
echo '.' >> ${tmpfile}
echo 'quit' >> ${tmpfile}
echo >> ${tmpfile} 
#
# now send the email (and ignore output)
#

telnet $MAIL 25 < ${tmpfile} > /dev/null 2> /dev/null

#
# and remove temp files
#

rm -f ${tmpfile