crontab周期性任务设置
使用 crontab 命令设置的计划任务可以按预设的周期重复执行,从而大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个前提条件,即对应的系统服务 crond 必须已经运行。
1./etc/crontab——系统任务配置文件
/etc/crontab 文件中设置的是维护 Linux 操作系统所需的任务,Linux 操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。
例如,查看配置文件,用cat命令去查看:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash //设置执行计划任务的 Shell 环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin //定义可执行命令及程序的路径
MAILTO=root //将任务输出信息发送到指定用户的邮箱# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) //分
# | .------------- hour (0 - 23) //时
# | | .---------- day of month (1 - 31) //日
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... //月
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat // 周
# | | | | |
# * * * * * user-name command to be executed
由于各字段的作用不同,其取值范围也不一样,当使用“*”时表示取值范围中的任意时间。crontab 任务配置记录中所设置的命令操作将在“分钟”+“小时”+“日期”+“月份”+“星期”都满足的条件下执行。
crontab 计划任务的配置字段说明
分钟 取值为 0~59 的任意整数
小时 取值为 0~23 的任意整数
日期 取值为 1~31 的任意整数(日期在该月份中必须有效)
月份 取值为 1~12 的任意整数
星期 取值为 0~7 的任意整数,0 或 7 代表星期日
命令 可以是普通的命令,也可以是自己编写的程序脚本
除了“*”以外,还可以使用“-”(减号)、“,”(逗号)、“/”(斜杠)与数字构成表达式来表示较复杂的时间关系。
减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。
逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。
斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。
2.使用 crontab 命令管理用户的计划任务
设置用户的周期性计划任务列表主要通过 crontab 命令进行,结合不同的选项可以完成不同的计划任务管理操作。常用的选项如下。
-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己),一般只有 root 用户有权限使用此选项(用于编辑、删除其他用户的计划任务)。
-l:列表显示计划任务。
-r:删除计划任务列表。
(1)编辑用户的计划任务表
执行“crontab -e”命令后,将打开计划任务编辑界面(与 vi 中的操作相同)。通过该界面用户可以自行添加具体的任务配置,每行代表一个记录,配置的格式与/etc/crontab文件中的主体部分类似
例如,编辑一个任务:每天的21:01把/usr/bin目录下的家目录/home/shan复制到/opt目录下,编辑好以后保存退出,用 crontab -l查看任务。然后先去查看/opt目录下,会发现并没有,等到了时间再去查看,会发现有了shan的家目录,说明任务已经开始执行
[root@localhost ~]# crontab -l
1 21 * * * /usr/bin/cp -r /home/shan /opt/
[root@localhost ~]# ls /opt/
ps.txt rh
[root@localhost ~]# ls /opt/
ps.txt rh shan
例如,再编辑一个任务:每隔五天备份 /etc目录中的所有文件 到 /opt目录中,压缩包名称是bak.tar.gz。同样,用 crontab -l查看任务。
[root@localhost ~]# crontab -l
1 21 * * * /usr/bin/cp -r /home/shan /opt/
0 * */5 * * /uer/bin/tar zcvf /opt/bak.tar.gz /etc/*
(2)删除用户的计划任务列表
当只需要删除某一条计划任务时,可以通过“crontab -e”命令进行编辑;而若要清空某个用户的所有计划任务,可以执行“crontab -r”命令。
[root@localhost ~]# crontab -l
1 21 * * * /usr/bin/cp -r /home/shan /opt/
0 * */5 * * /uer/bin/tar zcvf /opt/bak.tar.gz /etc/*
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
在设置用户的 crontab 计划任务的过程中,由于每一条记录只能运行一行命令,难以完成更复杂的系统管理任务操作,因此在实际工作中,当需要按照固定周期运行一些操作复杂的任务时,通常会将相关命令操作编写成脚本文件,然后在计划任务配置中加载该脚本并执行