一次计划任务管理at和周期性任务设置crontab

计划任务管理

  • 在linux操作系统中,除了用户即时执行的命令操作外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集检测数据)。
  • 在CentOS系统中计划任务是由at、cronie 软件包提供,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。

1、at 一次性任务设置

  • at命令设置的计划任务只在指定的时间执行一次,前提是对应的系统服务atd必须已经运行。
  • 设置一次性任务时,在at命令行中依次指定计划执行任务的时间、日期作为参数,确认后将进入带“at>”提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按Ctrl+D 组合键体检任务即可。
  • at基本格式
at [HH:MM] [yyyy-mm-dd]		'//at  时:分  年-月-日'

例:在2020年6月29日的14.30分统计改时间点系统中由root用户运行的进程数量,并保存到“/tmp/ps.root"中

[root@localhost ~]# at 14.30 2020-06-29
at> pgrep -U root|wc -l >/tmp/ps.root
at> <EOT>
job 11 at Mon Jun 29 14:30:00 2020
[root@localhost ~]# atq
11      Mon Jun 29 14:30:00 2020 a root
  • 对于已经设置还未执行(未到时间点)的计划任务,可以通过atq命令进行查询。
[root@localhost ~]# atq
12      Mon Jun 29 14:45:00 2020 a root
  • 删除指定编号的at任务,可以使用atrm命令,删除后的at任务将不会被执行。
[root@localhost ~]# atrm 12

2、crontab周期性任务设置

  • 使用crontab命令设置的计划任务可以按预设的周期重复执行,可以减轻设置重复性系统管理任务的操作,由软件包cronie提供crontab工具、系统服务crond和配置文件/etc/crontab。
  • 启动周期性服务的条件,对应的系统服务crond必须已经运行。

2.1 crontab 的配置文件和目录

2.1.1 /etc/crontab——系统任务配置文件

  • /etc/crontab文件中设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户手动修改此文件。
  • 该文件中包括了设置Shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。
[root@localhost ~]# cat /etc/crontab  ## 查看配置文件
SHELL=/bin/bash   ## 设定执行计划任务的Shell任务环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin   ## 定义可执行命令及程序的路径
MAILTO=root         ##'//将任务输出信息发送到指定用户的邮箱'
HOME=/ 			'//执行计划任务时使用的主目录'

# 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

2.1.2 /etc/cron.*/ ——系统默认设置

  • 系统默认设置cron任务的配置文件存放目录
  • 软件包crontabs安装后,会在/etc/cron.*/目录下生成存放一些系统默认设置的计划任务目录,设置了系统每个小时,每一天做些什么任务
    例如:

/etc/cron.hourly/ 目录下存放的是系统每小时要做的任务可执行脚本

/etc/cron.daily/ 目录下存放的是系统每天要做的任务可执行脚本

/etc/cron.weekly/ 目录下存放的是系统每周要做的任务可执行脚本

/etc/cron.monthly/ 目录下存放的是系统每月要做的任务可执行脚本

这些是可执行脚本,不是cron配置文件,crond服务通过run-parts 工具调用执行这些脚本

2.1.3 /var/spool/cron/——用户名 用户定义的位置

  • 当用户自行设置(使用crontab命令)的cron计划任务将被保存到目录/var/spool/cron/中。
  • 当用户使用crontab’命令创建计划任务,就会在/var/spool/cron/目录下生成一个与用户名相同的文件。
[root@localhost ~]# ls -l /var/spool/cron/*
ls: 无法访问/var/spool/cron/*: 没有那个文件或目录		## root没有创建任务

2.2 使用crontab命令管理用户的计划任务

  • 设置用户的周期性计划任务列表主要通过crontab命令进行,结合不同的选项可以完成不同的计划任务管理操作。

2.2.1常用选项

crontab -e [-u 用户名]  		## 编辑计划任务  e:edit,编辑,使用方式同Vim编辑器。
crontab -l [-u 用户名] 		## 查看计划任务  l:list,列表
crontab -r [-u 用户名]  		## 删除计划任务  r:remove,移除
crontab -l 		## 查看当前用户的计划列表
crontab -l -u lisi 		 ## 查看lisi用户的计划任务
crontab -e 		## 可以操作删除一条计划任务
crontab -r 	 ## 删除用户所有的计划任务

2.2.2 分时日月周的取值范围和命令的说明

字段说明
分钟取值为0到59之间的任意整数
小时取值为0到23之间的任意整数
日期取值为1到31之间的任意整数
月份取值为1到12之间的任意整数
星期取值为0到7之间的任意整数,0或7代表星期
命令要执行的命令或程序脚本
  • 时间的设置
时间数值的特殊表示方法
*  表示该范围内的任意时间
,  表示间隔的多个不连续的时间点
-  表示一个连续的时间范围计划
/  指定间隔的时间频率
例如:
0 17 * * 1-5  		 '//表示周一到周五每天17:00'
30 8 * * 1,3,5 		'// 表示每周一,三,五的8点30分'
0 8-18/2 * * * 		'// 表示8点到18点之间每2小时'
0 * */3 * *  		'//表示每3天'
  • 分钟部分要填写一个数字,不可用”*“,否则每分钟都会执行一次。
  • 周期性任务创建
如:每天15:30将/home/中zhangsan目录复制到/opt/中
[root@localhost ~]# crontab -e		## 编辑计划任务
进入编辑列表开始编辑,操作类似vim 编辑器
30 15 * * * /usr/bin/cp -r /home/zhangsan /opt/		### 在其中编辑好任务,wq保存退出

2.2.3crond权限设置

  • 默认所有用户都可以使用crontab工具来创建自己自己的任务计划,root用户可以使用/etc/cron.deny 文件来管理crond任务计划使用权限。
  • root用户在/etc/cron.deny 中添加拒绝使用的用户名即可,且每行只能包括一个用户名,名字前不能带空格。
[root@localhost ~]# cat /etc/cron.deny  
tom                                                   
[root@localhost ~]# su tom
[tom@localhost root]$ crontab -e
You (tom) are not allowed to use this program (crontab)            ## tom不能使用crontab工具来创建自己的任务
See crontab(1) for more information

版权声明:本文为weixin_47219725原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。