走进Linux_例行性工作(crontab)

引:系统常常会主动进行一些任务,这依靠的就是设置了例行性工作。

什么是例行性工作(定时任务crontab)

根据单词crontab(定时任务)就可以知道 例行性工作 其实就是每天都会干的事。

Linux工作调度的种类

  1. 例行性的,就是每隔一定的周期要来办的事,利用crontab实现,这个命令所设置的工作将会循环一直进行下去,可循环的时间为分钟,小时,每周,每月或每年等,crontab除了可以使用命令执行外,也可编辑/etc/crontab来支持。至于让crontab可以生效的后台服务是crond这个服务。
  2. 突发性的,就是这次做完以后就没有的事,利用at实现,但是这个必须要有atd后台服务支持才行。

Linux上常见的例行性工作

  1. 进行日志文件的轮替,让旧的数据和新的数据分开存放
  2. 日志文件分析logwatch的任务
  3. 新建locate的数据库,系统会主动进行updatedb
  4. whatis数据库的建立
  5. 删除临时文件

仅执行一次的工作调度:at

at的运行方式

我们使用at这个命令来生成所要进行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录中,该工作便能等待atd这个服务的取用与执行了。但是并不是所有的人都可以进行at工作调度工作的,因为安全。我们可以利用/etc/at.allow与/etc/at.deny这两个文件进行at的使用限制,加上这两个文件后,at的工作情况其实是这样的:

  1. 先寻找/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at(即时没有写在at.deny当中)
  2. 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若卸载这个at.deny的用户则不能使用at,而没有在这个文件中的用户就可以使用at了
  3. 如果这两个文件都不存在,那么就只有root可以使用at这个命令

实际运行单一工作调度

单一工作调度的进行就使用at这个命令,这个命令的运行十分简单!将at加上一个时间即可!范例入下:

1
2
3
4
5
// 1. at [-mldv] TIME
at noe + 5 minutes // 再过五分钟执行,接下来输入执行的命令,使用ctrl + d 结束。

// 2. at -c 工作号码 // 将第几号工作调出来查看
at -c 1 // 将第一号工作调出来

事实上,当我们使用at时会进入一个at shell的环境来让用户执行工作命令,此时,建议你最好使用绝对路径来执行你的命令,比较不会有问题。

at还有一个很棒的优点就是后台执行的功能,和nohup类似。

at的工作管理 主要是利用下面的命令:

1
2
3
4
5
# 查询目前主机上面有多少的at工作调度
atq

# 将第3个工作删除
atrm 3

循环执行的例行性工作调度

相对于at是仅执行一次的工作,循环执行的例行性工作调度室友crond这个系统服务来控制的,由于Linux系统上原本就有很多的例行性工作,所以这个系统服务是默认开启的。另外,由于用户自己也可以进行例行性工作调度,所以,Linux可提供用户控制例行性工作调度的命令(crontab)。

用户的设置与使用

为了安全性的问题,与at类似,我们可以限制使用crontab的用户账号。使用的限制数据有:

  • /etc/cron.allow:将可以使用crontab的账号写入其中,若不在这个文件内的用户则不可使用crontab。
  • /etc/cron.deny:将不可以使用crontab的账号写入其中,若为记录到这个文件中的用户,就可以使用crontab。

以优先级来说,/etc/cron.allow比/etc/cron.deny要优先,而判断上面,两个文件只选择一个来限制而已,因此,建议你只要保留一个即可。

当用户使用crontab这个命令来新建工作调度之后,该项工作就会被记录/var/spool/cron/里面,而且是以账号来区分的。另外,cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中,所以,如果你的Linux不知道是否被植入密码,也可以查询一下这个日志文件。

下面是它的使用范例:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 1. 用root的身份在每天的12:00和14:00查看主文件夹目录ß
# 编辑crontab的工作内容
crontab -e
# 进入vi界面,每项工作都是一行
0 12,14 * * * ls / // 解释各列含义:
// 1. 分;2. 小时;3. 日期;4. 月份; 5. 周; 6. 命令
// 其中“,”表示分割时段,“-”表示一段时间范围,/n 表示每隔n单位间隔

// 2. 查询crontab任务
crontab -l

// 3. 若要删除一项工作,必须要用crontab -e去编辑,如果想要删除全部工作,如下:
crontab -r

系统的配置文件:/etc/crontab

crontab -e是针对用户的例行性工作来设计的,如果我们要修改系统的例行性任务,就需要编辑/etc/crontab了。

基本上,cron这个服务的最低检测限制是“分钟”,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容。

可唤醒停机期间的工作任务

如果例行性工作是在凌晨4点运行的,但是刚好关机了, 你7点开机了,你总不能不管它吧,这就需要用到anacron。

什么是anacron

anacron存在的目的 是处理非24小时一直启动的linux系统的crontab的执行。

anacron也是通过crontab来运行的,因此anacron的运行的时间通常有两个,一是系统开机期间运行,一个是写入crontab的调度中。

anacron使用

anacron的语法如下:

1
anacron [-sfn] [job]

参考

  1. 《鸟哥的Linux私房菜》