crond计划任务
环境说明
1、OS
CentOS 7.6
2、远程管理工具
xshell、xftp
3、系统优化
参考系统优化文档
计划任务简介
经验丰富的系统运维工程师可以使得Linux在无需人为介入的情况下,在指定的时间段自动启用或停止某些服务或命令,从而实现运维的自动化。
作用:计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
分类:
l 一次性计划任务:今晚11点30分开启网站服务。
l 长期性计划任务:每周一的凌晨2点20分把/data/wwwroot目录打包备份为backup.tar.gz。
一次性计划任务只执行一次,一般用于满足临时的工作需求。我
们可以用at命令实现这种功能,只需要写成“at 时间”的形式就
可以。
at的语法结构为:
at [OPTION]... TIME
TIME可以设定为以下的形式,非常灵活多变:
HH:MM [YYYY-mm-dd]
noon,midnight, teatime
tomorrow
now+#
UNIT:minutes, hours, days, OR weeks
比如:
now +5minutes 表示任务将在5分钟后执行;
now +1hours 表示任务将在1小时候执行;
now + 31days 表示任务将在1个月后执行;
now +1weeks表示任务将在1周后执行;
12:32 表示任务将在今天的12:32分的时候执行;
示例:今晚11点30分开启网站服务
前提:系统开启atd服务。
[root@kongd ~]# yum install at
[root@kongd ~]# systemctl start atd.service
[root@kongd ~]# systemctl enable atd.service
设置:
[root@kongd ~]# at 23:30
at> systemctl restart httpd
at> <EOT>
job 1 at Mon Sep 23 23:30:00 2019
一次性计划任务:Ctrl + D组合键来结束编写计划任务
at命令接收前面echo命令的输出信息,以达到通过非交互
式的方式创建计划一次性任务的目的
[root@kongd ~]# echo "systemctl restart httpd" | at
23:30
job 2 at Mon Sep 23 23:30:00 2019
查看:at -l
[root@kongd ~]# at -l
1 Mon Sep 23 23:30:00 2019 a root
2 Mon Sep 23 23:30:00 2019 a root
删除:atrm
[root@kongd ~]# atrm 2
如果我们希望Linux系统能够周期性地、有规律地执行某些具体的任务,那么Linux系统中默认启用的crond服务创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。
crontab命令中加上-u参数来编辑他人的计划任务
cron基础
使用crond服务设置任务的参数格式。
参数字段说明。
字段 说明
分 取值为0~59的整数
时 取值为0~23的任意整数
日 取值为1~31的任意整数
月 取值为1~12的任意整数
星期 取值为0~7的任意整数,其中0与7均为星期日
命令 要执行的命令或程序
crontab命令书写格式中符号的含义
* 代表每
l 逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月
l 减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)
l 除号(
/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)
示例:
25 3 * * 1,3,5 每周1,周3,周五的3:25分
0 1 * * 1-5 每周工作日(周一至周五)1:00
*/5 * * * * 每隔5分钟
p 书写定时计划任务的注意点:
l 每个任务添加注释,谁写的,什么时间写的,完成什么需求?
l 执行脚本使用/bin/sh(防止脚本无执行权限),要执行的文件使用绝对路径
l 尽量把要执行的命令放在脚本里,然后把脚本放在定时计划任务里。
l 对于调用脚本的定时任务,可以把标准输出错误输出重定向到空。
l 如果时上有值,分钟必须有值。
l “日”和“星期”字段不能同时使用,否则就会发生冲突
l 定时任务中%无法执行,需要转义\%
示例:
3,15 8-11 * * * myCommand
在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * *
每隔两天的上午8点到11点的第3和第15分钟执行
系统级的计划任务
这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/crontab,比如:
l 更新whatis数据库
l 更新updatedb数据库
l 日志定期轮转(切割)
l 清理/tmp,/var/tmp
l 收集系统的状态信息
p 文件/etc/crontab:
[root@kongd ~]# cat /etc/crontab
SHELL=/bin/bash
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
p 文件/etc/crontab:
SHELL:就是运行计划任务的解释器,默认是bash
PATH:执行命令的环境变量
MAILTO:计划任务的出发者用户
HOME:家目录为/
run-parts是一个脚本,在/usr/bin/run-parts,作用是执行一个目录下的所有脚本/程序。
run-parts /etc/cron.hourly执行目录/etc/cron.hourly/之下的所有脚本/程序.
run-parts下面就是运行的命令
用户级的计划任务
p 使用crontab配置
p 常用选项:-e: 编辑计划任务 edit
-l: 查看计划任务 display
-u: 指定用户 user
-r: 删除计划任务 remove
示例
1、每月1、10、22日的4:45重启network服务
2、每周六、周日的1:10重启network服务
3、每天18:00至23:00之间每隔30分钟重启network服务
4、每隔两天的上午8点到11点的第3和第15分钟执行一次重启
5、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备
份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss;
6、晚上11点到早上7点之间,每隔一小时重启smb
计划任务扩展
vim /etc/crontab 与crontab -e写入的定时运行的区别?。
vim /etc/crontab:是系统级别定义的crontab,/etc/crontab的所有者和组都是root
crontab -e :是用户自定义的crontab,是所有的用户都可以写入的 /var/spool/cron/username