引:系统常常会主动进行一些任务,这依靠的就是设置了例行性工作。
什么是例行性工作(定时任务crontab)
根据单词crontab(定时任务)就可以知道 例行性工作 其实就是每天都会干的事。
Linux工作调度的种类
- 例行性的,就是每隔一定的周期要来办的事,利用crontab实现,这个命令所设置的工作将会循环一直进行下去,可循环的时间为分钟,小时,每周,每月或每年等,crontab除了可以使用命令执行外,也可编辑/etc/crontab来支持。至于让crontab可以生效的后台服务是crond这个服务。
- 突发性的,就是这次做完以后就没有的事,利用at实现,但是这个必须要有atd后台服务支持才行。
Linux上常见的例行性工作
- 进行日志文件的轮替,让旧的数据和新的数据分开存放
- 日志文件分析logwatch的任务
- 新建locate的数据库,系统会主动进行updatedb
- whatis数据库的建立
- 删除临时文件
仅执行一次的工作调度:at
at的运行方式
我们使用at这个命令来生成所要进行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录中,该工作便能等待atd这个服务的取用与执行了。但是并不是所有的人都可以进行at工作调度工作的,因为安全。我们可以利用/etc/at.allow与/etc/at.deny这两个文件进行at的使用限制,加上这两个文件后,at的工作情况其实是这样的:
- 先寻找/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at(即时没有写在at.deny当中)
- 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若卸载这个at.deny的用户则不能使用at,而没有在这个文件中的用户就可以使用at了
- 如果这两个文件都不存在,那么就只有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]
参考
- 《鸟哥的Linux私房菜》