定时任务

用于执行在Linux中的重复性工作。如:命令(同步系统时间),脚本(备份,系统巡检)

服务使用流程:
部署,
配置,如何使用这个服务通过配置文件,通过命令,初级使用:能用就行;提高:额外的配置;
优化或注意事项:安全......
排障:难点;1,通过错误提示解决,2,学会去看日志;3,高级:让服务输出错误提示或输出更加详细的错误提示(通过重定向);
其他:1,做好监控,2,做好备份,3,做好日志收集;4,统一认证;

部署定时任务:
定时任务软件包名字:cronie,服务名字(进程)crond:
[root@web01 ~]# rpm -qa cronie
cronie-1.4.11-23.el7.x86_64

目录结构:
rpm -ql cronie
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.deny
/etc/pam.d/crond //这几个不用管
用户的配置文件的目录:
/var/spool/cron
比如:
/var/spool/cron/mclind
用crontab这个命令来编辑这个目录文件
日志文件:/var/log/cron
可以了解下面的配置文件:
[root@web01 ~]# ls -ld /etc/cron.*
drwxr-xr-x. 2 root root 36 12月 7 19:34 /etc/cron.d
drwxr-xr-x. 2 root root 42 12月 6 07:41 /etc/cron.daily //这个目录下,每天运行
-rw-------. 1 root root 0 8月 9 2019 /etc/cron.deny
drwxr-xr-x. 2 root root 22 12月 6 07:41 /etc/cron.hourly
drwxr-xr-x. 2 root root 6 6月 10 2014 /etc/cron.monthly
drwxr-xr-x. 2 root root 6 6月 10 2014 /etc/cron.weekly


完全使用指南
检查是否运行、开机自启动
# systemctl status crond
============
crontab用于定时任务的规则进行增删改查。
选项:
-e:编辑当前用户的定时任务,相当于在vi /var/spool/cron/root(root为当前用户名);
-l:查看当前用户的定时任务,相当于在cat /var/spool/cron/root(root为当前用户名);
-u:指定用户名;
-r:清空当前用户的定时任务;无提示;
-i:清空定时任务之前作提示;
输入crontab -e,即可进入编辑模式,和vim类似;
格式:
* * * * * 命令
分 时 日 月 周 comand to be executed
分:0-59
时:0-23
日:1-31
月:1-12
周:0-6,0或7都代表周日,1-6代表周一到周六;

案例:
每天早上8:30分,去学校
#1,test01 //这是注释
30 8 * * * go to school
晚上12点上床睡觉
* 00 * * * go to bed
00 00 * * * go to bed
//这两种有什么区别?
//第一种,每天的半夜12点,每分钟都go to bed;
//第二种,每天半夜12点,00分,go to bed一次;
//综上,涉及到小时,天,周几的时候,分钟位置上记得写个数(比如00),多少都行;

定时任务部分的特殊符号:
/:斜线,每隔XX时间,比如:*/2 * * * *,每2分种;
-:减号,表示范围,比如:00 8-18/2 * * *,8点到晚上18点期间每2个小时;
,:逗号,独立的一些时间,比如:00 8,9,12,14,18 * * *,8,9,12,14,18点,只有这几个;适用于没规律的时候;

接着找案例:
每天早7点到晚11点,每2个小时运行cmd命令
00 07-23/2 * * * CMD
1)每2分钟同步系统时间,命令要使用绝对路径,输出清空:
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com &>/dev/null
写好之后要调试(测试,检查 )(这里可以先修改一下时间,看能否同步)(date -s '20221111 11:11:11'
1,日志:看是否运行(定时任务日志,只能提示是否运行了,但无法告知是否成功,tail -f /var/log/cron);
2,结果:查看定时任务的结果(时间是否修改,压缩包是否生成);

为什么要用crontab -e编辑定时任务,而不是直接编辑文件呢?因为crontab -e,在保存时候,还有语不检查的功能;

定时任务书写流程:
1,分析要求需要使用什么命令并调试;
2,书写脚本(命令较多,功能复杂)与调试;
3,书写定时任务的配置文件(绝对路径,定向到空)
4,调试;

案例:02,每天定时备份/etc/到/backup/下面
备份时间:业务低谷期,比如凌晨1点备份;
命令:tar命令;
脚本:命令大礼包 .sh .bash结尾;
定时任务配置:
命令:
mkdir -p /backup/ //这只用创建一次
tar zcf /backup/etc-`date +%F`.tar.gz /etc/
脚本:
专用脚本目录:(自己规划,备份放哪,脚本放哪,软件包放哪)
mkdir -p /server/scripts
cd /server/scripts
vim backup-etc.sh //名字,建议见名知义
以下是脚本内容:
tar zcf /backup/etc-`date +%F`.tar.gz /etc/
脚本内容完毕,对,只有这一行,就是上面执行的一行;
sh /server/scripts/backup-etc.sh //执行脚本
书定定时任务:
#2,这是一个定时备份/etc/目录任务,by root at Xxxx
00 01 * * * /bin/sh /server/scripts/backup-etc.s >/dev/null 2>&1
//一开始测试,可以设置频率高一点,比如每分钟,没问题了,可以设置正常要求时间;
tail -f /var/log/cron //查看日志检查
watch ls -l //watch,每2秒运行一下命令

脚本与变量:
变量,可以改变的量,在脚本中可以重复使用;
a = 'asdf'
echo $a //变量取值
dir=/server/scripts/
file=backup-etc.sh
echo $dir$file

脚本开头:建议加上#!/bin/bash,这是一个说明;
对以上脚本改写:

#脚本开始
#!/bin/bash

#定义变量
time=`date +%F_%w`

tar zcf /backup/etc/-$time.tar.gz /etc/
#至此脚本改完;;

posted @ 2022-12-20 19:42  mclind  阅读(35)  评论(0编辑  收藏  举报