计划任务管理
目录
- 在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版权协议,转载请附上原文出处链接和本声明。