网站搜索

Cron 与 Anacron:如何在 Linux 上使用 Anacron 安排作业


在本文中,我们将解释 cronanacron,并向您展示如何在 Linux 上设置 anacron。我们还将对这两个实用程序进行比较。

要在给定时间或稍后时间安排任务,您可以使用“at”或“batch”命令,并设置命令重复运行,您可以使用 < cron 和 anacron 设施。

Cron – 是一个守护进程,用于运行计划任务,例如系统备份、更新等。它适合在服务器等24X7连续运行的机器上运行计划任务。

命令/任务被编写到 crontab 文件中安排的 cron 作业中。默认的系统 crontab 文件是 /etc/crontab,但每个用户也可以创建自己的 crontab 文件,该文件可以在用户定义的时间启动命令。

要创建个人 crontab 文件,只需键入以下内容:

crontab -e

如何在 Linux 中设置 Anacron

Anacron 用于以天为单位定期运行命令。它的工作方式与 cron 略有不同;假设机器不会一直通电。

它适用于在不会 24-7 运行的计算机(例如笔记本电脑和台式机)上运行通常由 cron 运行的每日、每周和每月计划作业。

假设您有一个计划任务(例如备份脚本)要在每天午夜使用 cron 运行,可能是在您睡觉时,并且您的台式机/笔记本电脑那时已关闭。您的备份脚本将不会被执行。

但是,如果您使用anacron,则可以放心,下次再次打开台式机/笔记本电脑时,将执行备份脚本。

Anacron 如何在 Linux 中工作

anacron 作业列在 /etc/anacrontab 中,并且可以使用以下格式安排作业(anacrontab 文件内的注释必须以 # 开头)。

period   delay   job-identifier   command

由上面的格式可知:

  • period – 这是以天为单位指定的作业执行频率,或者以 @daily、@weekly 或 @monthly 的形式指定每天、每周或每月一次。您还可以使用数字:1 – 每天、7 – 每周、30 – 每月和 N – 天数。
  • 延迟 – 执行作业之前等待的分钟数。
  • job-id – 它是写入日志文件中的作业的独特名称。

要查看示例文件,请键入:

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
  • 命令 – 这是要执行的命令或 shell 脚本。
这就是实际发生的情况:
  • Anacron 将检查作业是否已在 period 字段中指定的时间内执行。如果没有,则在等待延迟字段中指定的分钟数后执行命令字段中指定的命令。
  • 执行作业后,它会将日期记录在 /var/spool/anacron 目录中的时间戳文件中,并使用 job-id(时间戳文件名)字段中指定的名称。

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

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

如果在 backup.sh 作业预计运行时机器已关闭,anacron 将在机器开机后 10 分钟运行它,而无需再等待 7 天。

您应该了解 anacrontab 文件中有两个重要变量:

  • START_HOURS_RANGE – 设置作业启动的时间范围(即仅在以下时间执行作业)。
  • RANDOM_DELAY – 这定义了添加到用户定义的作业延迟的最大随机延迟(默认为 45)。

这就是您的 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                                                                      

以下是 cronanacron 的比较,以帮助您了解何时使用它们。

It’s a daemon

它不是守护进程

Appropriate for server machines

适用于台式机/笔记本电脑

Enables you to run scheduled jobs every minute

仅允许您每天运行计划作业

Doesn’t executed a scheduled job when the machine if off

如果在计划作业到期时机器关闭,则下次开机时将执行计划作业

Can be used by both normal users and root

除非另有说明,否则只能由 root 使用(为具有特定配置的普通用户启用)

cronanacron 之间的主要区别在于,cron 在连续运行的机器上有效工作,而 anacron 的目的是对于将在一天或一周内关闭的机器。

如果您知道其他方式,请使用下面的评论表与我们分享。