欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

cron 与 anacron:如何在 Linux 中计划任务

在本篇中,我们会解释 cron 和 anacron,并向你展示如何在 Linux 中设置 anacron。我们也会比较这两个工具。

在一个给定时间或者稍后安排一个任务,你可以使用 at 或者 batch 命令,要使命令能够重复运行,你可以使用 cron 以及 anacron 工具。

cron - 是一个用于运行计划任务如系统备份、更新等的守护进程。它适合在那些 24X7 不间断运行的机器如服务器上运行的计划任务。

命令/脚本被写在 cron 任务脚本中,它是在 crontab 文件中被安排的。系统默认的 crontab 文件是 /etc/crontab,但是每个用户也可以创建自己的 crontab文件来在特定时间运行用户定义的命令。

要创建一份个人 crontab 文件,只要输入:

  1. $ crontab -e

如何在 Linux 中设置 anacron

anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机

cron 也适合在那些不会 24X7 运行如笔记本以及桌面电脑的机器上运行每日、每周以及每月的计划任务(LCTT 译注:不适合按小时、分钟执行任务)。

假设你有一个计划任务(比如备份脚本)要使用 cron 在每天半夜运行,也许你以及睡着,那时你的桌面/笔记本电脑已经关机。你的备份脚本就不会被运行。

然而,如果你使用 anacron,你可以确保在你下次开启桌面/笔记本电脑的时候,备份脚本会被执行。

anacron 如何在 Linux 工作

anacron 任务被列在 /etc/anacrontab 中,任务可以使用下面的格式(anacron 文件中的注释必须以 # 号开始)安排。

  1. period   delay   job-identifier   command

从上面的格式中:

  • period - 这是任务的频率,以天来指定,或者是 @daily@weekly@monthly 代表每天、每周、每月一次。你也可以使用数字:1 - 每天、7 - 每周、30 - 每月,或者 N - 几天。

  • delay - 这是在执行一个任务前等待的分钟数。

  • job-id - 这是写在日志文件中任务的独特名字。

  • command - 这是要执行的命令或 shell 脚本。

要浏览示例文件,输入:

  1. $ ls -l /var/spool/anacron/

  2. total 12

  3. -rw------- 1 root root 9 Jun  1 10:25 cron.daily

  4. -rw------- 1 root root 9 May 27 11:01 cron.monthly

  5. -rw------- 1 root root 9 May 30 10:28 cron.weekly

这是实际发生的:

  • anacron 会检查任务是否已经在 period 字段指定的时间被被执行了。如果没有,则在等待 delay 字段中指定的分钟数后,执行 command 字段中指定的命令。

  • 一旦任务被执行了,它会使用 job-id(时间戳文件名)字段中指定的名称将日期记录在 /var/spool/anacron 目录中的时间戳文件中。

现在让我们看一个例子。这个会每天运行 /home/aaronkilik/bin/backup.sh 脚本:

  1. @daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh

当机器在 backup.sh 期望被运行时是关机的,anacron 会在机器开机十分钟之后运行它,而不用再等待 7 天。

这里有两个你应该理解的 anacrontab 文件的重要变量:

  • START_HOURS_RANGE - 这个设置任务开始运行的时间范围(也就是任务只在这几个小时内运行)。

  • RANDOM_DELAY - 这定义添加到用户定义的任务延迟的最大随机延迟(默认为 45)。

这是你的 anacrontab 文件可能看上去的样子。

Anacron – /etc/anacrontab

  1. # /etc/anacrontab: configuration file for anacron

  2. # See anacron(8) and anacrontab(5) for details.

  3. SHELL=/bin/sh

  4. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

  5. HOME=/root

  6. LOGNAME=root

  7. # These replace cron's entries

  8. 1       5       cron.daily      run-parts --report /etc/cron.daily

  9. 7       10      cron.weekly     run-parts --report /etc/cron.weekly

  10. @monthly        15      cron.monthly    run-parts --report /etc/cron.monthly

  11. @daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh                                                                      

下面是 cron 以及 anacron 的比较,帮助你理解何时用他们其中一个。


< 如显示不全,请左右滑动 >
cronanacron
它是守护进程它不是守护进程
适合服务器适合桌面/笔记本电脑
可以让你以分钟级运行计划任务只能让你以天为基础来运行计划任务
关机时不会执行计划任务如果计划任务到期,机器是关机的,那么它会在机器下次开机后执行计划任务
普通用户和 root 用户都可以使用只有 root 用户可以使用(使用特定的配置启动普通任务)


cron 和 anacron 主要的区别在于 cron 能在那些持续运行的机器上有效地运行,而 anacron 是针对那些会在一天内或者一周内会关机的机器。

如果你还知道其他方式,请在评论栏中与我们分享。

(题图:Pixabay,CC0)


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员,现在也是 TecMint 的内容创作者,他喜欢和电脑一起工作,坚信共享知识。

来自 https://linux.cn/article-8590-1.html



Linux anacron命令用法详解

C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应!

anacron 是用来做什么的呢?我们的 Linux 服务器如果不是 24 小时开机的,而刚好在关机的时间段之内有系统定时任务(cron)需要执行,那么这些定时任务是不会执行的。

换句话说,假设我们需要在凌晨 5 点 05 分执行系统的日志备份,但是我们的 Linux 服务器不是 24 小时开机的,在晚上需要关机,在白天上班之后才会再次开机,在这个定时任务的执行时间我们的服务器刚好没有开机,那么这个定时任务就不会执行了。anacron 就是用来解决这个问题的。

anacron 会使用 1 天、7 天、一个月作为检测周期,用来判断是否有定时任务在关机之后没有执行。如果有这样的任务,那么 anacron 会在特定的时间重新执行这些定时任务。

那么,anacron 是如何判断这些定时任务已经超过执行时间的呢?在系统的 /var/spool/anacron/ 目录中存在 cron.{daily,weekly,monthly} 文件,这些文件中都保存着 anacron 上次执行的时间。anacron 会读取这些文件中的时间,然后和当前时间进行比较,如果两个时间的差值超过 anacron 的指定时间差值(一般是 1 天、7 天和一个月),就说明有定时任务没有执行,这时 anacron 会介入而执行这个漏掉的定时任务,从而保证在关机时没有执行的定时任务不会被漏掉。

在 CentOS 6.x 中使用 cronie-anacron 取代了 vixie-cron 软件包。而且在原先的 CentOS 版本的 /etc/cron.{daily,weekly,monthly} 目录中的定时任务会同时被 cron 和 anacron 调用,这样非常容易出现重复执行同一个定时任务的错误。在 CentOS 6.x 中,/etc/cron.{daily,weekly,monthly} 目录中的定时任务只会被 anacron 调用,从而保证这些定时任务只会在每天、每周或每月定时执行一次,而不会重复执行。

在 CentOS 6.x 中 anacron 还有一个变化,那就是 anacron 不再是单独的服务,而变成了系统命令。也就是说,我们不再使用“service anacron restart”命令来管理 anacron 服务了,而需要使用 anacron 命令来管理 anacron 工作。

来自  http://c.biancheng.net/view/1095.html



Linux系统入门学习:Linux中的anacron命令

[日期:2015-04-06]来源:Linux社区  作者:xinguimeng[字体:  ]

如果我们的Linux主机是24全天全年的处于开机状态,我们只需要atd与crond这两个服务即可,如果我们的服务器并非24小时无间断的启动,那么我们就需要anacron的帮助了。

anacron并不能取代cron去运行某项任务,而是以天为单位或者是在启动后立刻进行anacron的动作,它会去侦测停机期间应该进行但是并没有进行的crontab任务,并将该任务运行一遍后,anacron就会自动停止了。

anacron会以一天、七天、一个月周期去侦测系统中未进行的crontab任务,因此对于某些特殊的使用环境非常有帮助。anacron会去会去分析现在的时间与时间记录档所记载的上次运行anacron的时间,两者比较厚若发现有差异,也就是在某些时刻没有进行crontab,那么此时anacron就会开始执行未运行的crontab了。所以anacron也是听过crontab来运行的,因此anacron运行的时间通常由两个,一个是系统启动期间运行,一个是写入crontab的排程中,这样才能够在特定时间分析系统未进行的crontab工作。我们可以使用ll  /etc/cron*/*ana*的方式来查看anacron的侦测时间。但是我们仔细分析该文件的话,发现它主要是执行anacron命令。

anacron命令的语法如下:

(1)-s开始连续的运行各项工作,会一句时间记录当的数据判断是否进行。

(2)-f强制进行,而不去判断时间登录档的时间戳。

(3)-n立即进行未进行的任务,而不延迟等待时间。

(4)-u仅升级时间记录当的时间戳,不进行任何工作。

而anacron的配置文件是/etc/anacrontab,而它的很多内容则是在/var/spool/anacron里面保存。

当anacron下达anacron  -s  cron.daily时,它会有如下的步骤:

(1)由/etc/anacrontab分析到cron.daily这项工作名称的天数为一天。

(2)由/var/spool/anacron/cron.daily取出最近一次运行anacron的时间戳。

(3)把取出的时间戳与当前的时间戳相比较,如果差异超过了一天,那么就准备进行命令。

(4)若准备进行命令,根据/etc/anacrontab的配置,将延迟65分钟。

(5)延迟时间后,开始运行后续命令,也就是run-parts  /etc/cron.daily这串命令。

(6)运行完毕后,anacron程序结束。

Linux计划任务(at batch crontab anacron)  http://www.linuxidc.com/Linux/2013-03/81584.htm

来自  https://www.linuxidc.com/Linux/2015-04/115849.htm



cron与anacron:如何在Linux中计划任务

cron与anacron:如何在Linux中计划任务

在本篇中,我们会解释 cron 和 anacron,并向你展示如何在 Linux 中设置 anacron。我们也会比较这两个工具。

要在一个给定时间或者稍后安排一个任务,你可以使用 at 或者 batch 命令,要使命令能够重复运行,你可以使用 cron 以及 anacron 工具。

cron - 是一个用于运行计划任务如系统备份、更新等的守护进程。它适合在那些 24X7 不间断运行的机器如服务器上运行的计划任务。

命令/脚本被写在 cron 任务脚本中,它是在 crontab 文件中被安排的。系统默认的 crontab 文件是 /etc/crontab,但是每个用户也可以创建自己的 crontab 文件来在特定时间运行用户定义的命令。

要创建一份个人 crontab 文件,只要输入:

$ crontab -e 

如何在 Linux 中设置 anacron

anacron 用于以天为单位的频率运行命令。它的工作与 cron 稍有不同,它假设机器不会一直开机。

cron 也适合在那些不会 24X7 运行如笔记本以及桌面电脑的机器上运行每日、每周以及每月的计划任务(LCTT 译注:不适合按小时、分钟执行任务)。

假设你有一个计划任务(比如备份脚本)要使用 cron 在每天半夜运行,也许你以及睡着,那时你的桌面/笔记本电脑已经关机。你的备份脚本就不会被运行。

然而,如果你使用 anacron,你可以确保在你下次开启桌面/笔记本电脑的时候,备份脚本会被执行。

anacron 如何在 Linux 工作

anacron 任务被列在 /etc/anacrontab 中,任务可以使用下面的格式(anacron 文件中的注释必须以 # 号开始)安排。

period   delay   job-identifier   command 

从上面的格式中:

period - 这是任务的频率,以天来指定,或者是 @daily、@weekly、@monthly 代表每天、每周、每月一次。你也可以使用数字:1 - 每天、7 - 每周、30 - 每月,或者 N - 几天。 delay - 这是在执行一个任务前等待的分钟数。 job-id - 这是写在日志文件中任务的独特名字。 command - 这是要执行的命令或 shell 脚本。

要浏览示例文件,输入:

$ ls -l /var/spool/anacron/ total 12 -rw------- 1 root root 9 Jun  1 10:25 cron.daily -rw------- 1 root root 9 May 27 11:01 cron.monthly -rw------- 1 root root 9 May 30 10:28 cron.weekly 

这是实际发生的:

anacron 会检查任务是否已经在 period 字段指定的时间被被执行了。如果没有,则在等待 delay 字段中指定的分钟数后,执行 command 字段中指定的命令。 一旦任务被执行了,它会使用 job-id(时间戳文件名)字段中指定的名称将日期记录在 /var/spool/anacron 目录中的时间戳文件中。

现在让我们看一个例子。这个会每天运行 /home/aaronkilik/bin/backup.sh 脚本:

@daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh 

当机器在 backup.sh 期望被运行时是关机的,anacron 会在机器开机十分钟之后运行它,而不用再等待 7 天。

这里有两个你应该理解的 anacrontab 文件的重要变量:

START_HOURS_RANGE - 这个设置任务开始运行的时间范围(也就是任务只在这几个小时内运行)。 RANDOM_DELAY - 这定义添加到用户定义的任务延迟的最大随机延迟(默认为 45)。

这是你的 anacrontab 文件可能看上去的样子。

Anacron – /etc/anacrontab:

# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root # These replace cron's entries 1       5       cron.daily      run-parts --report /etc/cron.daily 7       10      cron.weekly     run-parts --report /etc/cron.weekly @monthly        15      cron.monthly    run-parts --report /etc/cron.monthly @daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh                                                                       

下面是 cron 以及 anacron 的比较,帮助你理解何时用他们其中一个。

cron anacron 它是守护进程 它不是守护进程 适合服务器 适合桌面/笔记本电脑 可以让你以分钟级运行计划任务 只能让你以天为基础来运行计划任务 关机时不会执行计划任务 如果计划任务到期,机器是关机的,那么它会在机器下次开机后执行计划任务 普通用户和 root 用户都可以使用 只有 root 用户可以使用(使用特定的配置启动普通任务)

cron 和 anacron 主要的区别在于 cron 能在那些持续运行的机器上有效地运行,而 anacron 是针对那些会在一天内或者一周内会关机的机器。

如果你还知道其他方式,请在评论栏中与我们分享。

(题图:Pixabay,CC0)

来自  http://www.techweb.com.cn/network/system/2017-06-24/2545152.shtml

普通分类: