linux定时任务基础命令介绍(14)

2019-09-23 09:15:11刘景俊

2、crontab
命令crontab用来设置、移除、列出服务crond表格,crond服务的作用类似atd,区别的地方在于crond可以设置任务多次执行。相对来说比atd更常用。

同样需要启动服务crond

[root@centos7 temp]# ps -ef|grep [c]rond
root    733   1 0 12月20 ?   00:00:00 /usr/sbin/crond -n

系统中每个用户都可以拥有自己的cron table,同atd类似,crond也有两个文件/etc/cron.allow和/etc/cron.deny用来限制用户使用cron,规则也和atd的两个文件相同。

选项-l表示列出当前用户的cron表项
选项-u表示指定用户

[root@centos7 ~]# crontab -l -u learner
no crontab for learner
[root@centos7 ~]#

选项-e表示编辑用户的cron table。编辑时系统会选定默认编辑器,在笔者的环境中是vi
通过直接编辑文件/etc/crontab可以设置系统级别的cron table。
使用crontab -e的方式编辑时,会在/tmp下面生成一个临时文件,保存后crond会将内容写入到/var/spool/cron下面一个和用户名同名的文件中,crond会在保存时做语法检查。这也是推荐的设置定时任务的用法。

语法:

* * * * * command
每一行表示一个任务,以符号#开头的行表示注释,不生效。每个生效行都形如上面所示,一行被分为6部分,其中:

第一部分表示分钟(0-59),* 表示每分钟
第二部分表示小时(0-23),* 表示每小时
第三部分表示日(1-31),  * 表示每天
第四部分表示月(1-12),  * 表示每月
第五部分表示周几(0-6,0表示周日),* 表示一周中每天
第六部分表示要执行的任务
关于时间设置的前五部分中,除了*表示当前部分的任意时间外,还支持另外三个符号/、,、-分别表示每隔、时间点A和时间点B、时间点A到时间点B。
如每隔3分钟测试10.0.1.252的连通性,并将结果追加输出到/root/252.log中

[root@centos7 ~]# crontab -e
*/3 * * * * /usr/bin/ping -c1 10.0.1.252 &>> /root/252.log

保存后会有crontab: installing new crontab字样出现。注意六个部分都不能为空,命令最好写绝对路径,编辑普通用户的定时任务时,要注意命令的执行权限。

如一月份到五月份,每周2和周5凌晨2:30执行备份任务

30 2 * 1-5 2,5 /bin/bash /root/temp/backup.sh

这里将备份任务写入到脚本/root/temp/backup.sh中执行

如3-6月和9-12月,每周一到周五12点到14点,每2分钟执行一次刷新任务

*/2 12-14 * 3-6,9-12 1-5 /bin/bash /root/temp/refresh.sh

混合使用日期时间及特殊符号,可以组合出大多数想要的时间。

查看定时任务

[root@centos7 ~]# crontab -l
*/3 * * * * /usr/bin/ping -c1 10.0.1.252 &>> /root/252.log
30 2 * 1-5 2,5 /bin/bash /root/temp/backup.sh
*/2 12-14 * 3-6,9-12 1-5 /bin/bash /root/temp/refresh.sh