周期性计划任务 cron

# 安装
yum install -y cronie crontabs cronie-anacron

cron计划任务分为 2 种

系统计划任务用户计划任务
系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件保存在 /var/spool/cron/USERNAME,利用 crontab 命令管理
  • 系统计划任务主配置文件/etc/crontab,只有root用户可编辑

计划任务时间格式

image20210618222956654.png

语法

*  *  *  *  *
分 时 日 月 周

@yearly 	0 0 1 1 *			 		#每年执行一次
@annually 	0 0 1 1 *			 		#每年执行一次
@monthly 	0 0 1 * *				 	#每月执行一次
@weekly 	0 0 * * 0		 			#每周执行一次
@daily 		0 0 * * *				 	#每天执行一次
@hourly 	0 * * * *					#每小时执行一次
@reboot Run once after reboot			#重启后执行一次

相关配置文件

/etc/crontab 			#cron编写系统计划任务主文件
/etc/cron.d/			#cron编写系统计划任务子文件
/etc/cron.hourly/		#每小时执行目录下存放的可执行文件
/etc/cron.daily/		#每天执行目录下存放的可执行文件
/etc/cron.weekly/		#每周执行目录下存放的可执行文件
/etc/cron.monthly/		#每月执行目录下存放的可执行文件
  • /etc/crontab文件为crond系统计划任务主配置,其中也可以把一个计划任务单独存放/etc/cron.d/目录下,避免误修改主配置文件内容

  • /etc/anacrontab配置文件说明,anacrontab程序是对cronie计划任务是否执行进行检查,负责执行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系统任务

cron 用户计划任务

crontab命令常用参数

参数含义
crontab -e调用vi编辑器,编写用户计划任务
crontab -l查看用户的计划任务
crontab -r删除全部用户计划任务
crontab -i同-r一同使用,以交互式模式移除指定任务
crontab -u <用户> [ -e | -l | -r | -i ]仅root可运行,指定用户管理cron任务

注意点

# 转义

30 2 * * * /bin/cp -a /etc/ /data/etc`date +\%F_\%T`

# crontab中将把%后面内容作为前面命令的标准输入
* * * * * bc % 2+1

sleep 命令实现以秒级别运行任务

  • 计划任务也无法完成以每7分钟执行任务,原因是一个小时60分钟无法被7整除
sleep 20s		#sleep命令默认以秒级别
sleep 5m		#进程休眠5分钟
sleep 3h		#进程休眠3个小时
sleep 2d		#进程休眠2天

usleep 微秒级的休眠

#休眠一微秒
usleep 100000
sleep 0.000001

#休眠一毛秒
usleep 1000
sleepp 0.0001

一次性计划任务 at

# 安装
yum install -y at

at命令常用参数

参数含义
at -l查看at命令创建的计划任务;相当于 atq
at -d <任务编号>删除指定编号计划任务;相当于 atrm
at -c <任务编号>查看指定编号的任务;相当于cat /var/spool/at/目录下对应脚本文件
at -f <文件> <时间>at命令接收标准输入信息,即:从指定文件中读取任务
at -m当任务被完成之后,将给用户发送邮件,即使没有标准输出
at -t <时间>定义时间格式

邮件接收信息

1.  at 创建计划任务相当于创建一个脚本,存放在 /var/spool/at目录下

2.  计划任务会以创建计划任务的用户身份执行,也就是用户环境变量在执行at 计划变量值是一致的

3.  在执行at计划任务,执行命令有输出和错误信息误以执行任务的用户身份发邮件通知给 root,所以系统上需要邮件服务postfix

# 安装
[root@myx01~]$ yum install -y postfix
[root@myx01~]$ systemctl start --now postfi

# 使用
[root@myx01~]$ mail

示例

1.每周的工作日1:30,将/etc目录数据备份至/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间 

[root@myx01~]$ crontab -e mkdir /backup && tar Jcpf /backup/etcbak-`date -d '1 day ago' +%Y-%m-%d-%H`.tar.xz /etc &> /dev/null

2.每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中 

[root@myx01~]$ crontab -e 

0 */2 * * * cat /proc/meminfo | egrep "^S|^M" >> /tmp/meminfo.txt