Bonky
Neither believe nor reject anything, because any other person has rejected or believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

Linux 定时任务

种类

主要分为两种,一种是日常任务,一种是突发任务。Linux 分别使用 at 与 crontab 来解决:

  • at :仅执行一次就结束的指令,不过要执行 at 时, 必须要有 atd 这个服务。在某些发行版中,atd 可能默认没有启动,那么 at 这个指令就会失效。不过 CentOS 默认是启动的。
  • crontab :所设定的工作将会循环的一直进行下去! 可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 服务

at

首先使用前,我们需要检查 atd 服务是否启动:

at 指令的工作流程是这样的:

  1. 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at
  2. 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at
  3. 如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。使用 at 时,at 并将任务以文本的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了。

at 指令的具体使用方法如下:

下面是我的一个简单使用:

注意,执行 at 指令的时候,如果是计划任务里使用的是相对目录,那么则其根目录是执行 at 指令所在的目录。为了避免这种问题,所以执行时候最好使用绝对目录。

如果想要删除,请使用:

batch

其实 batch 是利用 at 来进行指令的下达,所以你可以在 atq 查到你要执行的 batch 任务。batch 的特点在于:他会在 CPU 的工作负载小于 0.8 的时候,才进行你所下达的任务。

crontab

和 at 类似,我们可以限制允许的账号和拒绝账号,使用/etc/cron.allow/etc/cron.deny。当用户使用 crontab 这个指令来建立任务之后,该任务就会被纪录到 /var/spool/cron/

crontab 的语法如下:

使用后会进入 vim 的编辑界面(修改 /etc/crontab):

注意,这里面周代表的是周几的意思(取值从 0-7,0和7都是星期天)。还有,日月和周同时写并不是同时满足日月周才会执行,而是满足了日月或者周都会执行。即:15 12 12 15 5 既会在12月15日执行,也会在周五执行

还有一些特殊符号:

特殊字符 代表意义
* 代表任何时刻都接受的意思
, 代表分隔时段的意思。 3,6 代表3点6点都可以
代表一段时间范围内。
/n 每隔 n 个时间间隔的意思。例如每五分钟进行一次:*/5,
前面那个是时间范围,也可以是 *

anacron

anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的排程任务有没有被执行,如果有超过期限的工作在, 就执行该排程任务,执行完毕或无须执行任何排程时,anacron 就停止了。

比如:你的系统每天凌晨都会备份一次,但不过周五下班的时候你都会进行关机,周一来上班的时候才会开机。这么说整个周五你的操作都没有进行备份,然后周一来的时候你可能改错了什么,然后你需要返回之前的备份,但你最多只能返回到周四的备份(因为周五你没有备份)。

amacron 就是为了解决这种未执行的 crontab 任务,他会分析上次执行 anacron 的时间,若发现有差异, 说明某些时刻没有执行 crontab 。此时 anacron 就会开始执行未进行的 crontab 任务了。

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注