使用 Anacron 处理 Linux 关机问题
2011-11-27 09:04
295 查看
简介: Linux® 最初使用 Cron 自动执行常规系统维护,比如替换日志文件和更新垃圾信息过滤规则。这种方法可以很好地服务于全天候运行的服务器和其他系统。但是,如果要在不使用计算机时 关闭它以节约资源(常见于台式机和笔记本系统),那么则不能运行 Cron。如果不能定期运行 Cron,将会生成大量的日志文件并引发其他问题。Anacron 实用工具提供了一种解决方案,支持计算机在每次开机后运行常规的维护作业,即使这些开机时间是不固定的。
问题
如果在台式机或笔记本电脑中运行 Linux(或大多数其他 UNIX 系统),那么可能会经常关闭系统。确实,有些系统在一天中关机的时间也许要比开机的时间还长。这可以帮助减少电费。对于笔记本电脑来说,如果在旅途中没有 电源插座,经常关机有助于延长电脑的使用时间。不幸的是,这种经常性地关机行为会为 Linux 系统带来问题,因为 Linux 使用称为 Cron 的实用工具在后台运行日常的维护作业。当这些作业停止运行时,就会引发问题,时间一长,系统的性能就会越来越低。
Cron 的设计目的是在无人值守的情况下,在指定的时间启动程序。一般来说,共有两种类型的 Cron 作业(即由 Cron 运行的程序):系统 Cron 作业,由系统运行,执行系统维护任务;另一种是 用户 Cron 作业,由用户创建,用于执行用户任务。对于这两种作业而言,系统 Cron 作业更加重要一些。这些作业可能包括清除 /tmp 中的陈旧文件、替换日志文件、更新垃圾邮件过滤规则,以及更新
大部分 Linux 系统在 /etc 中包含了一系列与 Cron 有关的子目录。/etc/crontab 文件指定 Cron 应该将哪些作业作为系统 Cron 作业运行。通常来讲,该文件告诉 Cron 分别按照每小时、每天、每周和每月的时间间隔运行位于 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 中的脚本。运行这些作业的精确时间在 /etc/crontab 中指定。对于每天运行和以更长时间间隔运行的作业,运行时间通常为早晨。问题在于,台式机和笔记本系统很可能在这些时间是关闭的。
当 Cron 作业无法运行时,各种问题就随之而来。具体问题取决于本来应当运行的 Cron 作业,但举例来说,问题包括日志文件变大,/tmp 目录变乱,以及数据库过期问题,这些数据库用于存储可用软件更新或本地系统命令的位置。
显然,保持运行 Cron 作业非常重要。如果需要经常关闭某个系统,应当寻找一种方法来避免这些问题。Anacron 正是实现这个目标的解决方案。
回页首
开始使用 Anacron
如果使用 Anacron 可以为您所管理的系统带来好处,您应当首先了解它的功能。随后,您可以获取、安装并配置该软件,然后将它链接到现有的 Cron 配置。
Anacron 的基本原理
Anacron 的目的并不是完全替代 Cron。尽管对于经常关闭的系统来说,Cron 会造成一些严重的问题,但是,对于经常运行的作业,比如远程邮件服务器上每小时进行一次的新邮件检查,Cron 仍然是一个重要的工具。Anacron 的目的是补充 Cron,而不是替代它。
Cron 是作为守护进程运行的,与此不同的是,Anacron 是作为普通进程运行并终止的。Anacron 维护了一组应当运行的作业,每个作业都一个相关的运行间隔。每次运行时,Anacron 将检查作业列表以了解自最后一次运行某个作业后,是否超过了该作业的指定时间间隔。如果是的话,Anacron 将运行该作业。
这种设计方法意味着 Anacron 必须定期运行。运行 Anacron 小节描述了两种方法。每种方法各有利弊。一般来讲,Anacron 是由根用户运行的,但是普通用户可能也使用 Anacron,就像在 Anacron 的个人应用 中描述的那样。
获取并安装 Anacron
大多数 Linux 发行版都在其软件包中包括了 Anacron。因此,通过输入
清单 1. 从 CVS 下载 Anacron
输入第一条命令后,将作为 guest 用户登录到 CVS 库。这将提示您输入密码。只需要按下 Enter 键(guest 访问不需要用到密码)。第二个命令将把 Anacron 源代码下载到名为 anacron 的子目录中。
使用 CVS 获得 Anacron 的一个缺点就是有时候这种方法并不可靠。如果软件没有得到彻底的编译,您可以尝试自己解决问题,否则需要等待一两天直到他人帮助您修复问题。如果问题继续存在,那么最好追踪预编译的二进制文件,即使这意味着寻找另一个发行版的文件。
Anacron 中的一个常见 bug 是
获得 Anacron 源代码后,可以按照下面的步骤进行安装(注意,如果已经为发行版安装了预编译的二进制文件,则不需要执行这些步骤):
切换到由
作为一个可选步骤,编辑
输入
作为
安装完软件后,不管是使用发行版的包管理,还是从源代码中安装,都应该继续进行配置并运行 Anacron。
配置 Anacron
Anacron 通过 /etc/anacrontab 文件进行控制。该文件可以包含注释行(使用一个前导散列符号
清单 2. 样例作业定义
每项作业定义包含四个字段:
运行时间,单位为天(上例中为
启动 Anacron 和运行作业之间的延迟,单位为分钟,前提是自最后一次运行之后所经过的时间超出了运行时间。您可能需要对作业使用不同的运行延迟,防止所有作业同时运行,从而影响系统性能。
作业名(前例中为
要运行的命令。在前例中,命令名为
前例的目的是替换运行日常 Cron 作业的
在开始配置 Anacron 时,第一步需要检查
回页首
运行 Anacron
配置好 Anacron 后,现在可以启动它。由于这是一项必须定期执行的作业,仅仅输入一次
在启动时运行 Anacron
如果频繁地关闭和重启计算机(每天一次或多次),那么在启动计算机时运行 Anacron 是个不错的选择。在计算机启动后,Anacron 将检查应当运行的作业,并且如果有必要的话,将运行它们。在典型的业务环境中,对于台式机,很可能在用户开始其工作不久之后就运行 Anacron 作业。对于笔记本电脑,运行周期可能更加难以预测(注意 “启动” 意味着完整的系统启动;如果计算机通常被置于休眠模式而不是被关闭,那么系统启动脚本将不会运行,因此这种方法将不会定期运行 Anacron 作业)。
要在启动时运行 Anacron,必须创建一个 SysV 启动脚本来启动该软件。完成这项工作的脚本很简单,只需下面两行代码:
清单 3. 运行 Anacron 的启动脚本
可以将此脚本放到 /etc/init.d、/etc/rc.d/init.d 或您的发行版放置其启动脚本的任何位置。随后可以在标准运行级别的目录(比如 /etc/rc3.d 或 /etc/rc.d/rc3.d)中创建到该脚本的链接。您应当为这个链接指定一个名字(比如
如果您的发行版包含一个 Anacron 包,那么该包可能包含相应的 SysV 启动脚本,因此您仅需要进行检查,确保在启动计算机时运行 Anacron。您可以查找名称以
将 Anacron 配置为在系统启动时运行后,应当对日志文件和由 Anacron 作业管理的其他特性进行一段时间的观察。进行检查,确保 Anacron 作业在合适的时间运行(注意,每次 Anacron 运行一个日志文件替换作业时,日志文件不一定被替换,这取决于
从 Cron 运行 Anacron
如果在一天之内,计算机的关闭和重启次数少于一次,或者您使用了休眠模式而不是彻底关闭计算机,那么您需要通过 Cron 作业运行 Anacron。您可以在您的 /etc/crontab 文件内创建一个条目来完成这项工作,如下所示:
清单 4. 运行 Anacron 的 Cron 作业
该条目将在每一个小时的第 17 分钟时运行 Anacron,它将检查作业并在必要时运行它。注意,Anacron 只在必要时运行其作业,因此,如果一个小时之内的运行次数小于一次,那么这样做的意义不大,除非您可以预测系统的启动时间 — 并且在这种情况下,您可能需要使用 Cron 来调度作业。
在通过 Cron 作业运行 Anacron 时,相对于用户行为,您并不能十分肯定 Anacron 作业的运行时间。Anacron 作业可能会在不恰当的时刻耗尽 CPU 时间。与这形成对比的是在用户启动计算机后不久就运行 Anacron 作业,并以系统启动进程的形式运行 Anacron。
Anacron 的个人应用
前面的步骤假设将 Anacron 用于运行系统 Cron 作业。大部分情况是这样的,但是普通用户也可以运行 Anacron 管理个人 Cron 作业,这些作业应当每天执行或以更长的时间间隔执行。基本原理是相同的,但是要创建一个个性化的 Anacron 配置,必须使用
用户可以在其个人 Cron 配置中使用这类调用,或者使用自己的登录脚本完成作业。无论哪种情况,都必须存在 spool 目录,而 Anacron 配置文件使用的格式与系统 Anacron 作业相同。和系统配置一样,普通 Cron 工具应当每小时运行一次或使用小于一天的时间间隔。
回页首
结束语
对于不需要全天候运行的计算机来说,Anacron 是十分有用的工具。您可以将每日或更长时间执行的大部分或全部 Cron 作业转移到 Anacron 上,确保这些作业在系统每次启动时运行;或者通过 Cron 每小时(或其他时间间隔)运行 Anacron,以运行难以预测的作业。
尽管 Anacron 是非常有用的工具,但是它也有缺点。最明显的是,当用户需要完成工作时,Anacron 运行作业时可能会耗尽 CPU 时间或以其他方式损害系统性能。鉴于这个原因,最好将 Anacron 应用于真正需要它的系统,比如经常在夜晚关机的笔记本电脑和台式机,而 Cron 作业通常在夜晚运行。
参考资料
学习
SourceForge 的 Anacron Web 页面 提供了有关这个程序的简单介绍。
在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
“Linux 技巧:用 cron 和 at 调度作业”(developerWorks,2007 年 7 月)和 “Linux 技巧:控制预定作业的持续时间”(developerWorks,2007 年 7 月)是两篇关于作业调度技巧的 Linux 文章。
随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
使用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个 Linux 开发项目。
讨论
加入 My developerWorks 社区;您可以通过个人档案和定制主页获得符合自己的兴趣的 developerWorks 文章,并与其他 developerWorks 用户交流知识。
关于作者
Roderick W. Smith 是一位顾问兼作家,他撰写了十多本关于 UNIX 和 Linux 的书,包括 The Definitive Guide to Samba 3、Linux in a Windows World 和 Linux Professional Institute Certification Study Guide。他目前定居罗得岛州的 Woonsocket 市。
问题
如果在台式机或笔记本电脑中运行 Linux(或大多数其他 UNIX 系统),那么可能会经常关闭系统。确实,有些系统在一天中关机的时间也许要比开机的时间还长。这可以帮助减少电费。对于笔记本电脑来说,如果在旅途中没有 电源插座,经常关机有助于延长电脑的使用时间。不幸的是,这种经常性地关机行为会为 Linux 系统带来问题,因为 Linux 使用称为 Cron 的实用工具在后台运行日常的维护作业。当这些作业停止运行时,就会引发问题,时间一长,系统的性能就会越来越低。
Cron 的设计目的是在无人值守的情况下,在指定的时间启动程序。一般来说,共有两种类型的 Cron 作业(即由 Cron 运行的程序):系统 Cron 作业,由系统运行,执行系统维护任务;另一种是 用户 Cron 作业,由用户创建,用于执行用户任务。对于这两种作业而言,系统 Cron 作业更加重要一些。这些作业可能包括清除 /tmp 中的陈旧文件、替换日志文件、更新垃圾邮件过滤规则,以及更新
locate数据库。
大部分 Linux 系统在 /etc 中包含了一系列与 Cron 有关的子目录。/etc/crontab 文件指定 Cron 应该将哪些作业作为系统 Cron 作业运行。通常来讲,该文件告诉 Cron 分别按照每小时、每天、每周和每月的时间间隔运行位于 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 中的脚本。运行这些作业的精确时间在 /etc/crontab 中指定。对于每天运行和以更长时间间隔运行的作业,运行时间通常为早晨。问题在于,台式机和笔记本系统很可能在这些时间是关闭的。
当 Cron 作业无法运行时,各种问题就随之而来。具体问题取决于本来应当运行的 Cron 作业,但举例来说,问题包括日志文件变大,/tmp 目录变乱,以及数据库过期问题,这些数据库用于存储可用软件更新或本地系统命令的位置。
显然,保持运行 Cron 作业非常重要。如果需要经常关闭某个系统,应当寻找一种方法来避免这些问题。Anacron 正是实现这个目标的解决方案。
回页首
开始使用 Anacron
如果使用 Anacron 可以为您所管理的系统带来好处,您应当首先了解它的功能。随后,您可以获取、安装并配置该软件,然后将它链接到现有的 Cron 配置。
Anacron 的基本原理
Anacron 的目的并不是完全替代 Cron。尽管对于经常关闭的系统来说,Cron 会造成一些严重的问题,但是,对于经常运行的作业,比如远程邮件服务器上每小时进行一次的新邮件检查,Cron 仍然是一个重要的工具。Anacron 的目的是补充 Cron,而不是替代它。
Cron 是作为守护进程运行的,与此不同的是,Anacron 是作为普通进程运行并终止的。Anacron 维护了一组应当运行的作业,每个作业都一个相关的运行间隔。每次运行时,Anacron 将检查作业列表以了解自最后一次运行某个作业后,是否超过了该作业的指定时间间隔。如果是的话,Anacron 将运行该作业。
这种设计方法意味着 Anacron 必须定期运行。运行 Anacron 小节描述了两种方法。每种方法各有利弊。一般来讲,Anacron 是由根用户运行的,但是普通用户可能也使用 Anacron,就像在 Anacron 的个人应用 中描述的那样。
获取并安装 Anacron
大多数 Linux 发行版都在其软件包中包括了 Anacron。因此,通过输入
yum install anacron、
apt-get install anacron或类似的内容,就可以安装该软件。如果您的发行版没有包含 Anacron 包,那么需要从源代码中下载并安装该包。不幸的是,Anacron Web 站点并没有包含 tarball 链接;您需要使用 Concurrent Versions System (CVS) 获得下载:
清单 1. 从 CVS 下载 Anacron
cvs -d:pserver:anonymous@anacron.cvs.sourceforge.net:/cvsroot/anacron login cvs -z3 -d:pserver:anonymous@anacron.cvs.sourceforge.net:/cvsroot/anacron co -P anacron |
使用 CVS 获得 Anacron 的一个缺点就是有时候这种方法并不可靠。如果软件没有得到彻底的编译,您可以尝试自己解决问题,否则需要等待一两天直到他人帮助您修复问题。如果问题继续存在,那么最好追踪预编译的二进制文件,即使这意味着寻找另一个发行版的文件。
Anacron 中的一个常见 bug 是
gregor.c:79: error: assignment of read-only variable 'isleap'。修复这个 bug 的方法是编辑 gregor.c 文件第 79 行,并删除该行开始部分的字符串
const。
获得 Anacron 源代码后,可以按照下面的步骤进行安装(注意,如果已经为发行版安装了预编译的二进制文件,则不需要执行这些步骤):
切换到由
cvs创建的 Anacron 目录。
作为一个可选步骤,编辑
Makefile以调整软件安装目录或其他编译细节。
输入
make以构建软件。
作为
root,输入
make install以安装软件。
安装完软件后,不管是使用发行版的包管理,还是从源代码中安装,都应该继续进行配置并运行 Anacron。
配置 Anacron
Anacron 通过 /etc/anacrontab 文件进行控制。该文件可以包含注释行(使用一个前导散列符号
#表示)、环境变量分配(比如
SHELL=/bin/bash)和作业定义。最后一项是最重要的。它们类似以下的内容:
清单 2. 样例作业定义
1 5 cron.daily run-parts /etc/cron.daily |
运行时间,单位为天(上例中为
1)。
启动 Anacron 和运行作业之间的延迟,单位为分钟,前提是自最后一次运行之后所经过的时间超出了运行时间。您可能需要对作业使用不同的运行延迟,防止所有作业同时运行,从而影响系统性能。
作业名(前例中为
cron.daily)。
要运行的命令。在前例中,命令名为
run-parts /etc/cron.daily。
前例的目的是替换运行日常 Cron 作业的
/etc/crontab中的普通代码行。当设置并运行 Anacron 后,应当能够删除对应的
/etc/crontab行,并且系统将继续正常运行 — 如果系统经常在运行日常 Cron 作业时被关闭,那么在替换后会得到更好的性能。
在开始配置 Anacron 时,第一步需要检查
/etc/crontab并将其较长的日常条目转换为 Anacron 作业。但是,不应该将每小时执行一次的 Cron 作业转换为 Anacron 形式;对于间隔时间短于一天的作业,Anacron 并不适合替代 Cron。严格地说,何时运行 Anacron 作业是由您选择的 Anacron 启动方法决定的,如下所示。
回页首
运行 Anacron
配置好 Anacron 后,现在可以启动它。由于这是一项必须定期执行的作业,仅仅输入一次
Anacron是远远不够的。有两种常见的定期运行 Anacron 的方法:可以在启动计算机时启动 Anacron,或者通过一项 Cron 作业启动该程序。使用哪一种方法,取决于日常使用计算机的方式。通常来讲,Anacron 将处理系统作业,但是您还可以使用它处理相当于用户 Cron 作业的内容,因此您可能需要配置它来同时运行这两种类型的作业。
在启动时运行 Anacron
如果频繁地关闭和重启计算机(每天一次或多次),那么在启动计算机时运行 Anacron 是个不错的选择。在计算机启动后,Anacron 将检查应当运行的作业,并且如果有必要的话,将运行它们。在典型的业务环境中,对于台式机,很可能在用户开始其工作不久之后就运行 Anacron 作业。对于笔记本电脑,运行周期可能更加难以预测(注意 “启动” 意味着完整的系统启动;如果计算机通常被置于休眠模式而不是被关闭,那么系统启动脚本将不会运行,因此这种方法将不会定期运行 Anacron 作业)。
要在启动时运行 Anacron,必须创建一个 SysV 启动脚本来启动该软件。完成这项工作的脚本很简单,只需下面两行代码:
清单 3. 运行 Anacron 的启动脚本
#/bin/bash anacron |
S99anacron),以确保 Anacron 是在系统启动时启动的(“S” 将指示系统在启动时运行此脚本,而 “99” 表示相对于其他启动脚本,系统应当在何时运行此脚本)。
如果您的发行版包含一个 Anacron 包,那么该包可能包含相应的 SysV 启动脚本,因此您仅需要进行检查,确保在启动计算机时运行 Anacron。您可以查找名称以
S开头的启动脚本链接,或者可以使用
chkconfig或
ksysv等工具来调整配置。
将 Anacron 配置为在系统启动时运行后,应当对日志文件和由 Anacron 作业管理的其他特性进行一段时间的观察。进行检查,确保 Anacron 作业在合适的时间运行(注意,每次 Anacron 运行一个日志文件替换作业时,日志文件不一定被替换,这取决于
logrotate配置)。
从 Cron 运行 Anacron
如果在一天之内,计算机的关闭和重启次数少于一次,或者您使用了休眠模式而不是彻底关闭计算机,那么您需要通过 Cron 作业运行 Anacron。您可以在您的 /etc/crontab 文件内创建一个条目来完成这项工作,如下所示:
清单 4. 运行 Anacron 的 Cron 作业
17 * * * * root anacron |
在通过 Cron 作业运行 Anacron 时,相对于用户行为,您并不能十分肯定 Anacron 作业的运行时间。Anacron 作业可能会在不恰当的时刻耗尽 CPU 时间。与这形成对比的是在用户启动计算机后不久就运行 Anacron 作业,并以系统启动进程的形式运行 Anacron。
Anacron 的个人应用
前面的步骤假设将 Anacron 用于运行系统 Cron 作业。大部分情况是这样的,但是普通用户也可以运行 Anacron 管理个人 Cron 作业,这些作业应当每天执行或以更长的时间间隔执行。基本原理是相同的,但是要创建一个个性化的 Anacron 配置,必须使用
-t参数启动该程序,这将获取替换配置文件的文件名,以及使用一个
-S参数,该参数指定 Anacron 存储其 spool 文件的目录:
anacron -t ~/.anacrontab -S ~/.anacron/
用户可以在其个人 Cron 配置中使用这类调用,或者使用自己的登录脚本完成作业。无论哪种情况,都必须存在 spool 目录,而 Anacron 配置文件使用的格式与系统 Anacron 作业相同。和系统配置一样,普通 Cron 工具应当每小时运行一次或使用小于一天的时间间隔。
回页首
结束语
对于不需要全天候运行的计算机来说,Anacron 是十分有用的工具。您可以将每日或更长时间执行的大部分或全部 Cron 作业转移到 Anacron 上,确保这些作业在系统每次启动时运行;或者通过 Cron 每小时(或其他时间间隔)运行 Anacron,以运行难以预测的作业。
尽管 Anacron 是非常有用的工具,但是它也有缺点。最明显的是,当用户需要完成工作时,Anacron 运行作业时可能会耗尽 CPU 时间或以其他方式损害系统性能。鉴于这个原因,最好将 Anacron 应用于真正需要它的系统,比如经常在夜晚关机的笔记本电脑和台式机,而 Cron 作业通常在夜晚运行。
参考资料
学习
SourceForge 的 Anacron Web 页面 提供了有关这个程序的简单介绍。
在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
“Linux 技巧:用 cron 和 at 调度作业”(developerWorks,2007 年 7 月)和 “Linux 技巧:控制预定作业的持续时间”(developerWorks,2007 年 7 月)是两篇关于作业调度技巧的 Linux 文章。
随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
使用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个 Linux 开发项目。
讨论
加入 My developerWorks 社区;您可以通过个人档案和定制主页获得符合自己的兴趣的 developerWorks 文章,并与其他 developerWorks 用户交流知识。
关于作者
Roderick W. Smith 是一位顾问兼作家,他撰写了十多本关于 UNIX 和 Linux 的书,包括 The Definitive Guide to Samba 3、Linux in a Windows World 和 Linux Professional Institute Certification Study Guide。他目前定居罗得岛州的 Woonsocket 市。
相关文章推荐
- 使用 Anacron 处理 Linux 关机问题
- linux使用C++做到类似mysql的命令行表格输出(处理中英文在命令行对齐问题)
- 在windows使用notepad++编写Linux文件的时候,处理换行问题(删掉CF/LF ^M)
- 使用vCenter 5.5模板创建Linux系统后网卡问题处理
- linux下使用libiconv进行汉字编码问题的处理-----libiconv静态库的编译
- linux 下连续使用多个scanf() 的问题和 fflush(stdin)的变通处理
- 使用libiconv库处理linux下字符编码转换的问题
- linux 下连续使用多个scanf() 的问题和 fflush(stdin)的变通处理
- Linux,du、df统计的硬盘使用情况不一致问题如何处理
- 关于金格电子签章的使用问题处理
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- linux 信号处理 三 (信号集的使用)
- C++文本流fstream在Linux和Windows中换行的处理问题
- NodeJs在Linux下使用的各种问题解决
- 问题解决:Linux 下使用 FileZilla 打开 Ftp 部分目录消失
- 在Linux系统上使用转发服务器处理邮件通信的教程
- hibernate3使用c3p0连接池调用oracle自定义对象问题处理
- Java下载文件时处理中文 使用URLEncoder编码后 空格变+号的问题
- linux下perl处理文本---使用hash处理
- 在linux下使用curl访问 多参数url GET参数问题