热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Anacron处理Linux关机问题

文章标题:使用Anacron处理Linux关机问题。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

     Linux? 最初使用 Cron 自动执行常规系统维护,比如替换日志文件和更新垃圾信息过滤规则。这种方法可以很好地服务于全天候运行的服务器和其他系统。但是,如果要在不使用计算机时关闭它以节约资源(常见于台式机和笔记本系统),那么则不能运行 Cron。如果不能定期运行 Cron,将会生成大量的日志文件并引发其他问题。Anacron 实用工具提供了一种解决方案,支持计算机在每次开机后运行常规的维护作业,即使这些开机时间是不固定的。
问题

      如果在台式机或笔记本电脑中运行 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


输入第一条命令后,将作为 guest 用户登录到 CVS 库。这将提示您输入密码。只需要按下 Enter 键(guest 访问不需要用到密码)。第二个命令将把 Anacron 源代码下载到名为 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


可以将此脚本放到 /etc/init.d、/etc/rc.d/init.d 或您的发行版放置其启动脚本的任何位置。随后可以在标准运行级别的目录(比如 /etc/rc3.d 或 /etc/rc.d/rc3.d)中创建到该脚本的链接。您应当为这个链接指定一个名字(比如 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


该条目将在每一个小时的第 17 分钟时运行 Anacron,它将检查作业并在必要时运行它。注意,Anacron 只在必要时运行其作业,因此,如果一个小时之内的运行次数小于一次,那么这样做的意义不大,除非您可以预测系统的启动时间 — 并且在这种情况下,您可能需要使用 Cron 来调度作业。

在通过 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 作业通常在夜晚运行


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
author-avatar
ah_落落_181
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有