`

第十六章 可唤醒停机期间的工作任务(anacron)

 
阅读更多
如果你的 Linux 主机是作为 24 小时全天、全年无休的服务器之用,那么你只要有 atd 与 crond 这两个服务来管理你的例行性工作排程即可。如果你的服务器并非 24 小时无间断的启动,那么你该如何进行例行性工作? 举例来说,如果你每天晚上都要关机,等到白天才启动你的 Linux 主机时,由於 CentOS 默认的工作排程都在 4:02am 每天进行,唔!如此一来不就一堆系统例行工作都没有人在做了!那可怎么办?此时就得要 anacron 这家伙了!

什么是 anacron

anacron 并不是用来取代 crontab 的,anacron 存在的目的就在於我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的运行!所以 anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,anacron 就会自动停止了。

由於 anacron 会以一天、七天、一个月为期去侦测系统未进行的 crontab 任务,因此对於某些特殊的使用环境非常有帮助。 举例来说,如果你的 Linux 主机是放在公司给同仁使用的,因为周末假日大家都不在所以也没有必要开启, 因此你的 Linux 是周末都会关机两天的。但是 crontab 大多在每天的凌晨以及周日的早上进行各项任务, 偏偏你又关机了,此时系统很多 crontab 的任务就无法进行。 anacron 刚好可以解决这个问题!

那么 anacron 又是怎么知道我们的系统啥时关机的呢?这就得要使用 anacron 读取的时间记录档 (timestamps) 了! anacron 会去分析现在的时间与时间记录档所记载的上次运行 anacron 的时间,两者比较后若发现有差异, 那就是在某些时刻没有进行 crontab 罗!此时 anacron 就会开始运行未进行的 crontab 任务了! 所以 anacron 其实也是透过 crontab 来运行的!因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 的排程中。 这样才能够在特定时间分析系统未进行的 crontab 工作嘛!了解乎!

anacron 与 /etc/anacrontab

anacron 其实是一支程序并非一个服务!这支程序在 CentOS 当中已经进入 crontab 的排程喔! 不相信吗?你可以这样追踪看看:

[root@www ~]# ll /etc/cron*/*ana*
-rwxr-xr-x 1 root root 379 Mar 28  2007 /etc/cron.daily/0anacron
-rwxr-xr-x 1 root root 381 Mar 28  2007 /etc/cron.monthly/0anacron
-rwxr-xr-x 1 root root 380 Mar 28  2007 /etc/cron.weekly/0anacron
# 刚好是每天、每周、每月有排程的工作目录!查阅一下每天的任务

[root@www ~]# cat /etc/cron.daily/0anacron
if [ ! -e /var/run/anacron.pid ]; then
    anacron -u cron.daily
fi
# 所以其实也仅是运行 anacron -u 的命令!因此我们得来谈谈这支程序!


基本上, anacron 的语法如下:

[root@www ~]# anacron [-sfn] [job]..
[root@www ~]# anacron -u [job]..
选项与参数:
-s  :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
-f  :强制进行,而不去判断时间记录档的时间戳记;
-n  :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
-u  :仅升级时间记录档的时间戳记,不进行任何工作。
job :由 /etc/anacrontab 定义的各项工作名称。


所以我们发现其实 /etc/cron.daily/0anacron 仅进行时间戳记的升级,而没有进行任何 anacron 的动作! 在我们的 CentOS 中,anacron 的进行其实是在启动完成后才进行的一项工作任务,你也可以将 anacron 排入 crontab 的排程中。但是为了担心 anacron 误判时间参数,因此 /etc/cron.daily/ 里面的 anacron 才会在档名之前加个 0 (0anacron),让 anacron 最先进行!就是为了让时间戳记先升级!以避免 anacron 误判 crontab 尚未进行任何工作的意思。

接下来我们看一下 /etc/anacrontab 的内容好了:

[root@www ~]# cat /etc/anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

1       65      cron.daily     run-parts /etc/cron.daily
7       70      cron.weekly    run-parts /etc/cron.weekly
30      75      cron.monthly   run-parts /etc/cron.monthly
天数   延迟时间 工作名称定义   实际要进行的命令串
# 天数单位为天;延迟时间单位为分钟;工作名称定义可自订;
# 命令串则通常与 crontab 的配置相同!

[root@www ~]# more /var/spool/anacron/*
::::::::::::::
/var/spool/anacron/cron.daily
::::::::::::::
20090315
::::::::::::::
/var/spool/anacron/cron.monthly
::::::::::::::
20090301
::::::::::::::
/var/spool/anacron/cron.weekly
::::::::::::::
20090315
# 上面则是三个工作名称的时间记录档以及记录的时间戳记


由於 /etc/cron.daily 内的任务比较多,因此我们使用每天进行的任务来解释一下 anacron 的运行情况好了。 anacron 若下达『 anacron -s cron.daily 』时,他会这样运行的:

1.由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
2.由 /var/spool/anacron/cron.daily 取出最近一次运行 anacron 的时间戳记;
3.由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行命令;
4.若准备进行命令,根据 /etc/anacrontab 的配置,将延迟 65 分钟
5.延迟时间过后,开始运行后续命令,亦即『 run-parts /etc/cron.daily 』这串命令;
6运行完毕后, anacron 程序结束。

所以说,时间戳记是非常重要的!anacron 是透过该记录与目前的时间差异,了解到是否应该要进行某项任务的工作! 举例来说,如果我的主机在 2009/03/15(星期天) 18:00 关机,然后在 2009/03/16(星期一) 8:00 启动,由於我的 crontab 是在早上 04:00 左右进行各项任务,由於该时刻系统是关机的,因此时间戳记依旧为 20090315 (旧的时间), 但是目前时间已经是 20090316 (新的时间),因此 run-parts /etc/cron.daily 就会在启动过 65 分钟后开始运行了。

所以罗, anacron 并不需要额外的配置,使用默认值即可!只是我们的 CentOS 只有在启动时才会运行 anacron 就是了。如果要确定 anacron 是否启动时会主动的运行,你可以下达下列命令:


[root@www ~]# chkconfig --list anacron
anacron      0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 详细的 chkconfig 说明我们会在后续章节提到,注意看 3, 5
# 的项目,都是 on !那就是有启动啦!启动时才会运行的意思!


现在你知道为什么隔了一阵子才将 CentOS 启动,启动过后约 1 小时左右系统会有一小段时间的忙碌!而且硬盘会跑个不停!那就是因为 anacron 正在运行过去 crontab 未进行的各项工作排程啦!这样对 anacron 有没有概念了呢? ^_^

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0430cron_4.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Linux运维-2系统管理-15系统管理-176定时任务之anacron.avi

    Linux运维-2系统管理-15系统管理-176定时任务之anacron.avi

    鸟哥Linux私房菜

    3. **anacron**:位于第十六章第4.1节。anacron是一种计划任务工具,用于执行周期性但并不需要精确定时的任务。 4. **apropos**:在第五章第3.1节中提到。apropos命令用于搜索手册页中与给定关键字相关的条目。 ...

    cronie-anacron-1.4.4-7.el6.i686.rpm

    cronie-anacron-1.4.4-7.el6.i686.rpm

    anacron2-开源

    Anacron是一个定期的命令调度程序。 它以天为单位指定的时间间隔执行命令。 Cron可用于“始终在线”服务器,带有台式机,笔记本电脑的anacron以及您关闭的所有设备。 自2000年以来,一直没有维护原始的anacron。

    linux之鸟哥的私房菜

    - **anacron**:在第十六章第4.1节讲解。一个定时任务管理工具,主要用于处理那些不经常运行的任务。 - **apropos**:在第五章第3.1节中提到。用于搜索与某个关键词相关的命令帮助信息。 - **array**:在第十一章第2...

    Linux定时任务1

    - `anacron`:适用于非全天候开机的服务器,会在开机后一次性执行停机期间未执行的任务。 - `cron`:每分钟检查并执行待执行的任务,依赖`crond`服务。 监控文件变化可以使用`tail -f`命令,而杀死进程则用`kill`...

    linux鸟哥的私房菜基础版

    - **anacron**:用于执行周期性任务,类似于cron但适用于不经常开机的系统,在第十六章第4.1节讲解。 - **apropos**:搜索手册页中的关键词,帮助用户找到相关的命令或函数,在第五章第3.1节说明。 - **array**:在...

    鸟哥的私房菜.pdf

    - 位置:第十六章、4.1 - 描述:一个定时任务管理系统,特别适合于不经常开机的系统上执行定期任务。 4. **apropos** - 位置:第五章、3.1 - 描述:用于搜索命令手册页的关键字,可以帮助用户找到与某个概念...

    linux学习资料1

    - **anacron**:在第十六章的4.1节中介绍了anacron工具,用于执行周期性的任务,即使这些任务错过了预定的时间。 - **apropos**:在第五章的3.1节中介绍了apropos命令,用于搜索与特定关键词相关的命令或手册页。 - ...

    鸟叔私房菜

    2. **anacron**:在第十六章4.1节中,介绍了anacron命令,这是一个周期性执行任务的工具,特别适用于那些并不总是运行的系统,比如家用电脑或服务器。 3. **auditd**:在第十七章5.5节中,探讨了审计日志服务,用于...

    在linux上定期执行命令、脚本(cron,crontab,anacron)

    这些任务可以是任何可执行命令或脚本,如备份、清理日志、更新系统等。然而,`cron`依赖于系统的持续运行,如果在指定执行时间机器关机,相应的任务将不会被执行。 `crontab`则是与`cron`密切相关的命令,用于管理...

    鸟哥linux私房菜

    - **anacron**:用于管理非周期性的后台任务,详情参阅第十六章4.1节。 - **apropos**:用于搜索命令的手册页,详情见第五章3.1节。 - **array**:数组在shell脚本中的使用方法,见第十一章2.6节。 - **at/atq/atrm*...

    linux10-时间任务,nfs

    anacron 服务可以通过 anacron 守护进程来实现, anacron 守护进程会周期性检查 /etc/anacrontab 文件中的任务队列,并执行其中的任务。 nfs(Network File System)是 Linux 中的一种文件系统,允许用户在网络上...

    Linux系统开发

    - **anacron**:第十六章、4.1节介绍了anacron工具,它是用于处理周期性任务的一种方式,适用于不经常运行的脚本。 - **apropos**:在第五章、3.1节中讲解了apropos命令,它可以用来搜索手册页中的关键词。 - **awk*...

    anacron-开源

    其设计目的是为了弥补标准cron服务的不足,cron通常依赖于系统定时启动的任务执行,而Anacron则可以在系统启动后的一段时间内执行错过了的定期任务。 ### Anacron的基本原理 Anacron的核心理念是基于日期而不是...

Global site tag (gtag.js) - Google Analytics