【例行性工作调度】
在 Linux 中,存在两种工作调度方式,一种是例行性的,即每隔一定周期执行的工作,另一种是突发性的,即这次工作完成后就结束调度
在 Linux 中,例行性工作调度依靠 Crond 服务的支持,通过 crontab
命令来实现
与 at
命令类似,考虑到安全性的问题,crontab
命令也进行了限制
/etc/cron.allow
:可以使用crontab
的账号写入其中/etc/cron.deny
:不可以使用crontab
的账号写入其中
同样,以优先级来说,/etc/cron.allow
的优先级要高于 /etc/cron.deny
,一般来说,从判断上来考虑,这两个文件只需要保留一个即可,以免影响在设置上的判断
当用户使用 crontab
命令新建工作调度后,该项工作就会记录在 /var/spool/cron/
中,且是以账号作为判别依据的
【crontab 命令】
crontab
命令为:crontab [选项]
,常见选项如下
- -u:后接 username,只有 root 用户才可进行该任务,即帮助账号名为 username 的用户新建、删除 Crontab 工作调度
- -e:编辑 Crontab 的工作内容
- -l:查阅 Crontab 的工作内容
- -r:删除所有的 Crontab 的工作内容,若要仅删除一项,使用 -e 选项编辑即可
在 Crontab 中,每行都代表一项工作,如下例,前五个字段分别代表分钟、小时、日期、月份、周,后续的字段为要执行的工作命令
1 | # 以 alex_mcavoy 的身份每天在 12:00 发信给自己 |
对于前五个时间字段来说,其数字范围如下表
意义 | 范围 |
---|---|
分钟 | 0 ~ 59 |
小时 | 0 ~ 23 |
日期 | 1 ~ 31 |
月份 | 1 ~ 12 |
周几 | 0 ~ 7(0、7 均代表周天) |
此外,还有一些辅助字符
字符 | 代表意义 | 实例 | 实例含义 |
---|---|---|---|
* |
任何时刻均接受 | 0 12 * * * command |
每天的 12:00 都执行后续命令 |
, |
分隔时段 | 0 3,6 * * * command |
每天的 3:00 和 6:00 都执行后续命令 |
- |
时间范围 | 20 8-12 * * * command |
每天的 8 点到 12 点 每隔 20 分钟都执行一次后续命令 |
/num |
每隔 num 单位间隔 | */5 * * * * command |
每隔 5 分钟执行一次后续命令 |
【/etc/crontab 配置文件】
crontab -e
是针对用户的 Cron 来设计的,其实质上是对 /usr/bin/crontab
这个文件进行修改
若是系统的例行性工作,则需要对 /etc/crontab
进行修改,Cron 服务会每分钟读取一次该文件的数据内容,从而进行系统的例行性工作调度
【anacron 服务】
若 Linux 主机是 24 小时全天午休运行的服务器,那么仅需要 atd、crond 这两个服务即可管理工作调度
若 Linux 主机并非是 24 小时无间断开机,那么就需要 anacron 服务了
anacron 服务并不能指定何时执行某项任务,而是以天为单位,或开机后立刻进行 anacron 的操作,去检测停机期间应该进行但是没有进行的 Crontab 任务,并将该任务执行
anacron 服务会去分析当前时间与时间记录文件所记载的上次执行 anacron 的时间,若比较两者后发现有区别,那就是在某些时刻没有进行 Crontab 任务,此时 anacron 就会开始执行未进行的 Crontab 任务