定时,是指在做一件事情过程中,后台有个计时器,预定时间到后触发另一项工作。延时,是指在做一件事情过程中,保持一种工作状态的时间。就如我的闹钟,每天早晨6:30就会准时响起,这就是一个典型的定时任务,如果此时我不想醒来,设置为5分钟后再次提醒,就发起了一个延时任务。
在Linux操作系统中,通过相应的命令也可以进行定时和延迟。延时命令at和定时命令crontable。
一 at命令
- at命令两种触发方式。
方式一:
[root@localhost ~]# at 20:39
20:39时在/mnt/目录下创建file1 file2 file3三个文件,Ctrl+D
进行提交。可以使用watch命令监控/mnt/目录:
[root@localhost ~]# watch -n 1 ls -l /mnt/
20:39时在/mnt/目录下自动生成了三个文件。
方式二:
[root@localhost ~]# at now+1min
在一分钟后20:40删除/mnt/目录下的所有文件。
查看延迟任务
[root@localhost ~]# at -l
查看任务内容
[root@localhost ~]# at -c 5
删除延时任务
[root@localhost ~]# at -r 5
2.at命令的黑白名单
/etc/at.deny #at的黑名单,在该名单中的用户不能执行at命令
/etc/at.allow #at的白名单,一旦白名单存在则黑名单失效,除了在白名单中的用户可以执行at命令,其余都是拒绝。
设置at命令的黑白名单可以控制用户使用at命令。在/etc/目录下的at.deny文件是at的黑名单,将westos用户写入该文件后westos用户就无法使用at命令。
/etc/at.allow文件是不存在的,可以自己编辑。一旦白名单存在,黑名单就会失效,除了白名单中的用户,其余用户都会被禁止。再将westos写入at.allow文件之后,只有westos可以使用at命令。
二 crontable定时命令
crond这个软件提供定时服务。可以通过两种方式发起定时任务。
方式一:
[root@localhost ~]# crontab -e
执行该命令之后,会出现一个编辑界面,写入以下内容:
* * * * * rm -fr /mnt/*
由两部分组成,第一部分就是5个*,分别代表分钟 小时 天 月 周,第二部分为执行的命令rm -fr /mnt/*
。表示每分钟删除/mnt/下的所有文件。其余示例如下:
* * * * * rm -fr /mnt/* #每分钟执行一次
*/2 * * * * rm -fr /mnt/* #每两分钟执行一次
*/2 09,17 * * * rm -fr /mnt/* #每天的9点和17点每隔2分钟执行一次
*/2 09-17 * * * rm -fr /mnt/* #每天的9点到17点每隔2分钟执行一次
*/2 09-17 * * 2 rm -fr /mnt/* #每周二的9点到17点每隔2分钟执行一次
*/2 09-17 1,15 * 2 rm -fr /mnt/* #每月的1号和15号及每月周2每隔2分钟执行一次
*/2 09-17 1,15 7 2 rm -fr /mnt/* #7月1号和15号及7月周2每隔2分钟执行一次
通过-u指定用户:
[root@localhost ~]# crontab -u student -e #root指定student用户去发起定时任务
[root@localhost ~]# crontab -u student -l #列出student用户发起的定时任务内容
[root@localhost ~]# crontab -u student -r #删除student用户指定的定时任务
方式二
以第一种方式编辑的文件其实就是/var/spool/cron/目录下的文件,文件名是指定的用户,没有指定用户就是root用户:
crontable的黑白名单与at命令相似,/etc/cron.deny为cron的黑名单,/etc/cron.allow为白名单,白名单默认是不存在的,一旦白名单存在,黑名单就会失效,除了白名单中的用户,其余用户会被禁止使用crontable命令。
将westos写入黑名单,westos用户就会被禁止使用crontable命令。再将westos写入白名单,除了westos用户,除了root其余用户都被禁止使用crontable命令:
root用户通过其余用户使用crontable命令是可以发起定时任务的。但是用户登陆后使用crontable是会被禁止的。
系统中也存在定时任务,不需要人为发起,就会自动执行。只要在/etc/cron.d/目录下写入的定时任务都会被系统自动执行,在该目录下编辑westos文件:
表示每分钟root用户在/mnt/目录下创建一个test文件。