学习目标
- 知道计划任务在工作中的作用
- 能够使用at完成计划任务
- 能够使用cron完成计划任务
一、计划任务介绍
作为运维人员,经常需要某些脚本、命令在指定的时间段运行、停止。这些操作都可以由系统的计划任务完成的,计划任务又分为“一次性”与“周期性”之分。比如:
- 一次性计划任务:今晚12:30开启网站服务
- 周期性计划任务:每周2、4、6将/http/www目录保存备份为backup.tar.gz
二、at 一次性计划任务
1、at介绍
at在centos系统中默认是安装并且随机启动的。
atd管理:
systemctl status|start|stop|restart atd
2、at语法
| 命令 | 作用 |
|---|---|
| at [选项] 时间 | 在指定的时间执行特定的任务 |
| 作用 | 作用 |
|---|---|
| -l | 列出系统上所有该用户的任务,也可以使用atq |
| -d | 删除一个任务,也可以使用atrm |
| 时间格式 | 含义 |
|---|---|
| HH:MM | 在这个时间点执行任务 |
| HH:MM YYYY-MM-DD | 强制规定在某年某月某日某个时刻执行该任务 |
| HH:MM + n [minutes|hours|days|weeks] | 某个时刻的后的某个时间点执行任务 |
3、案例
# 案例一:再过1分钟后,将任务执行时间写入date.txt 文件[root@itcast ~]# at now + 1minutesat> date > /root/date.txtat> <EOT> # 输入[ctrl] + d 就出现<EOF>,代表退出at编辑模式job 2 at Thu Mar 28 12:27:00 2019 # 表示第二个at工作将在这个时间执行# 案例二:由于机房预计于2019/10/2停电,我想要在2019/10/1 23:00关机[root@itcast ~]# at 23:00 2019-10-1at> /bin/sync # 将内存中尚未存入磁盘中的信息存到磁盘中,保证数据不丢失at> /bin/syncat> /sbin/shutdown -h nowat> <EOT>job 5 at Tue Oct 1 23:00:00 2019# 查看at任务[root@itcast ~]# at -l //也可以使用:atq4 Thu Mar 28 12:35:00 2019 a root5 Tue Oct 1 23:00:00 2019 a root# 删除5号任务[root@itcast ~]# at -d 5 //也可以使用:atrm
三、cron 周期性计划任务
1、cron介绍
cron的服务是crond这个系统服务来控制的,可以用来循环执行任务。在linux系统中也是默认开启并且随机启动的服务。cron使用crontab指令建立计划任务之后,该工作就会记录到`/var/spool/cron/`里面去。而且是以账号作为判别的,比如,itcast用户使用crontab后,任务会被记录到`/var/spool/cron/itcast`里面去。但是要注意,不要直接使用vim去编辑这个文件,以为可能由于输入语法错误,导致无法执行crontab任务。我们执行过的任务记录,会被记录到/var/log/cron这个文档中。也就是cron的日志文件。
2、crontab命令
| 命令 | 作用 |
|---|---|
| crontab [选项] | 为每个用户维护周期的计划任务 |
| 选项 | 含义 |
|---|---|
| -u username | 指定用户管理计划任务,只有root才能使用 |
| -e | 编辑crontab任务 |
| -l | 查看crontab任务 |
| -r | 移除所有crontab的任务,若仅移除一项,使用-e去编辑 |
3、crontab语法
使用crontab -e进入编辑cron任务模式,编辑的语法是
案例:用root身份在每天1:00给itcast用户发一份邮件
[root@itcast html]# crontab -e0 1 * * * mail -s "send mail 01:00" itcast < /root/.bashrc#分 时 日 月 周 |--------------------指令(做什么)-----------------|
字段说明:
| 代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 指令 |
|---|---|---|---|---|---|---|
| 数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 要做什么任务 |
特殊字符说明:
| 特殊字符 | 含义 |
|---|---|
| * | 代表任何时刻 |
| , | 代表分割时段 |
| - | 代表时间范围 |
| /n | n表示数字,n单位时间间隔 |
4、案例
案例1: 每周5下午6点右键通知交周报
[root@itcast html]# crontab -e* 18 * * 5 mail haha@itcast.cn < /root/zhoubao.txt
案例2:每周2,4,6的凌晨2点30将/root目录打包为rootbackup.tar.gz
[root@itcast html]# crontab -e30 2 * * 2,4,6 /usr/bin/tar -czvf rootbackup.tar.gz /root/
