定时任务crond

article/2025/10/16 5:31:27

一、定时任务(crond)

 1.什么crond:crond就是计划任务,类似于我们平时生活中的闹钟,定点执行 。2.为什么要用crond:计划任务主要是做一些周期性的任务,比如: 凌晨3点定时备份数据。或11点开启网站抢购接口,12点关闭抢占接口。计划任务主要分为以下两种使用情况:1.系统级别的定时任务临时文件清理系统信息采集日志文件切割2.用户级别的定时任务定时向互联网同步时间定时备份系统配置文件定时备份数据库的数

二、定时任务管理

1.定时任务配置文件说明 /etc/crontab

[root@web01 ~]# vim /etc/crontab 
SHELL=/bin/bash   #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* * * * * root echo "hello world"
# * 表示任意(分时日月周)都会执行
# 2-3 表示一个时间范围 
# , 表示分隔 2,4,6
# /2  每隔多久      

2.定时任务阅读理解
在这里插入图片描述 3.crontab命令选项
参数 含义
-e 编辑定时任务
-l 查看定时任务
-r 删除定时任务
-u 指定其他用户

三、定时任务实践

1.使用root用户每5分钟执行一次时间同步

yum install -y ntpd #安装ntpdate命令
ntpdate ntp.aliyun.com #测试时间同步命令
which ntpdate #确认命令所在目录
crontab -e #配置定时任务
#每5分钟执行一次时间同步
*/5 * * * * ntpdate ntp.aliyun.com
crontab -l #查看定时任务

四、备份案例

1.准备一台服务器
主机:FXS
内网IP:192.168.12.210

2.需求
提前准备备份文件的目录,目录规则:/backup/web01_192.168.0.128_2020-11-10
打包备份文件,名字2018-02-20_hostname_etc.tar.gz
验证文件是否完整
将验证结果发送到邮箱
存放备份内容的目录要求只保留3天的数据
每天凌晨3:50执行该备份

3.编写脚本
vim bei.sh #编辑脚本
#!/bin/bash
mkdir -p /backup
tar zcf /backup/2018-02-20_hostname_etc.tar.gz /etc
find /backup/ -type f -mtime +3 | xargs rm -rf

4.将脚本写入定时任务
crontab -e #编辑定时任务
#每5分钟执行一次时间同步
*/5 * * * * ntpdate ntp.aliyun.com
#每天3:50执行备份文件脚本
50 3 * * * /bin/bash ~/bei.sh

五、定时任务编写

1.思路
手动执行命令,然后保留执行成功的结果。
编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
编写计划任务
加上必要的注释信息, 人、时间、任务
设定计划任务执行的周期
粘贴执行脚本的命令(不要手敲)
调试计划任务
增加任务频率测试
检查环境变量问题
检查crond服务日志 tail -f /var/log/cron

2.总结
定时任务规则配置一定要及注释
定时任务里面尽量使用脚本
运行脚本习惯性使用绝对路径
脚本执行结果或者命令执行结果尽量有用的定义到指定的日志,没用的定义到空
避免不必要的输出
打包命令尽量使用绝对路劲
系统的环境变量配置

一.计划任务基本概述

1.什么是计划任务

  • crond 就是计划任务
  • 类似于生活中的闹钟,定时执行
    2.为什么要使用 crond
  • 主要用于做一些周期性的任务
  • 比如公司每天的数据都需要备份一次, 不可能凌晨三点爬起来手动备份
  • 所以就可以使用到 crond 定时每天凌晨三点备份数据
    3.定时任务的应用
  • 系统级别的定时任务: 临时文件清理, 系统信息采集, 日志文件切割
  • 用户级别的定时任务: 定时同步网络时间, 定时备份系统配置文件, 定时备份数据库的数据

二.计划任务管理

1.crontab参数
在这里插入图片描述
2.crond 配置文件说明

vim /etc/crontab

在这里插入图片描述

  • 对应说明
SHELL=/bin/bash          #执行命令的解释器
PATH=PATH=/sbin:/bin:/usr/sbin:/usr/bin    #环境变量
MAILTO=root              #邮件发给谁"*" : 表示任意的(,,,,)时间都执行
"-" : 表示一个时间范围段,"5-7""," : 表示分隔时间段,"4,6,7"表示第四,第六,第7小时
"/" : 表示每个多少时间,"/2"表示每个两小时/两天等等

在这里插入图片描述
3.crontab 编写规范示例

00 02 * * * ls       #每天的凌晨2点整执行
00 02 1 * * ls       #每月的1日的凌晨2点整执行
00 02 14 2 * ls      #每年的2月14日凌晨2点执行
00 02 * * 7 ls       #每周天的凌晨2点整执行
00 02 * 6 5 ls       #每年的6月周五凌晨2点执行
00 02 14 * 7 ls      #每月14日或每周日的凌晨2点都执行
00 02 14 2 7 ls      #每年的2月14日或每年2月的周天的凌晨2点执行   
*/10  02 * * * ls    #每天凌晨2点,每隔10分钟执行一次
* * * * *  ls        #每分钟都执行
00 00 14 2 *  ls     #每年2月14日的凌晨执行命令 
*/5 * * * *  ls      #每隔5分钟执行一次
00 02 * 1,5,8 * ls   #每年的1月5月8月凌晨2点执行
00 02 1-8 * *  ls    #每月1号到8号凌晨2点执行
0 21 * * * ls        #每天晚上21:00执行
45 4 1,10,22 * * ls  #每月1、10、22日的4:45执行
45 4 1-10 * * l      #每月1到10日的4:45执行
3,15 8-11 */2 * * ls #每隔两天的上午8点到11点的第3和第15分钟执行
0 23-7/1 * * * ls    #晚上11点到早上7点之间,每隔一小时执行
15 21 * * 1-5 ls     #周一到周五每天晚上21:15执行

三.计划任务实践演示

1.环境准备

⛅创建一个放置你自己做实验脚本的目录,并将其加入到"PATH"[root@shawn ~]#mkdir /backup
[root@shawn ~]#vim /etc/profile.d/aaa.sh
写入这一行 : export PATH="$PATH:/backup/"⛅加载配置文件
[root@shawn ~]#source /etc/profile

1.定时将内存使用量写进文件, 一天后删除

⛅先写一个查看内存信息的脚本
[root@shawn ~]#vim /backup/b.sh
#内存使用情况
Total=`free -m | awk 'NR == 2{print $2}'`
Userd=`free -m | awk 'NR == 2{print $3}'`
Free=`free -m | awk 'NR == 2{print $4}'`
date=`date +%Y-%m-%d_%H:%M:%S`
#创建文件
mkdir /bak2 &> /dev/null
touch /bak2/MEM_${date}.log &> /dev/null
#写入文件
echo "总大小:${Total}" > /bak2/MEM_${date}.log
echo "已使用:${Userd}" >> /bak2/MEM_${date}.log
echo "剩余量:${Free}" >> /bak2/MEM_${date}.log
#删除超过一天的内存日志
find /bak2 -type f -mtime +1 -name "*.log" -exec rm -rf {} \;⛅对脚本添加执行权限
[root@shawn ~]#chmod o+x /backup/a.sh⛅将其加入到定时任务,并查看
[root@shawn ~]#crontab -e
[root@shawn ~]#crontab -l
* * * * * bash /backup/b.sh &> /dev/null  #每分钟⛅过几分钟看看,查看其中一个
[root@shawn ~]#ls /bak2
MEM_2020-11-10_22:01:01.log  
MEM_2020-11-10_22:02:01.log
[root@shawn ~]#cat /bak2/MEM_2020-11-10_22\:02\:01.log 
总大小:972
已使用:143
剩余量:710

2.定时进行目录备份, 要有主机名, IP, 以及时间

⛅写好脚本,打包"/home"目录
[root@shawn ~]#vim /backup/a.sh 
#定义变量
date=`date +%Y-%m-%d_%H:%M:%S`
hostname=`hostname`
hostname -I > /bak/ip.txt
ip=`/usr/bin/cat /bak/ip.txt`
IP=`echo ${ip}`
#创建文件目录
mkdir /bak &> /dev/null
#打包/home文件
tar czf /bak/${hostname}_${IP}_${date}_home.tar.gz /home
#删除三天前的文件
find /bak -type f -name "*.tar.gz" -mtime +3 | xargs rm -rf 
rm -rf /bak/ip.txt⛅对脚本添加执行权限
[root@shawn ~]#chmod o+x /backup/a.sh⛅将其加入到定时任务,并查看
[root@shawn ~]#crontab -e
[root@shawn ~]#crontab -l
* * * * * bash /backup/a.sh &> /dev/null  #每分钟⛅过几分钟看看
[root@shawn ~]#ls /bak
shawn_192.168.12.178_2020-11-10_22:01:01_home.tar.gz
shawn_192.168.12.178_2020-11-10_22:02:01_home.tar.gz
shawn_192.168.12.178_2020-11-10_22:03:01_home.tar.gz
shawn_192.168.12.178_2020-11-10_22:04:01_home.tar.gz

四.定时任务编写思路

1.手动执行命令,然后保留执行成功的结果
2.编写脚本

脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
3.执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
加上必要的注释信息, 人、时间、任务
设定计划任务执行的周期
粘贴执行脚本的命令(不要手敲)
5.调试计划任务
增加任务频率测试
检查环境变量问题
检查crond服务日志 tail -f /var/log/cron

五.总结

1.定时任务规则配置一定要注释
2.定时任务里面尽量使用脚本
3.运行脚本习惯性使用绝对路径
4.脚本执行结果或者命令执行结果尽量有用的定义到指定的日志,没用的定义到空
5.避免不必要的输出
6.打包命令尽量使用绝对路劲
7.系统的环境变量配置


http://chatgpt.dhexx.cn/article/rK0Fsdu8.shtml

相关文章

linux crond定时任务,Linux之定时任务Crond使用

Linux之定时任务Crond使用 一、用法 crond服务是linux系统自带的服务,是不需要手动安装的; crond服务是一种守护进程; Linux中的用户使用contab命令来配置corn任务; crontab –e : 修改 crontab 文件,如果文件不存在会自动创建; crontab –l : 显示 crontab 文件; cront…

Linux的基本操作——crond定时任务

一、crond简介 1、基本介绍 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每…

数组之二维数组

目录 一、二维数组的定义与引用 1、二维数组的定义 2、二维数组的引用 二、二维数组的赋值 1、二维数组的初始化 三、二维数组的应用举例 一、二维数组的定义与引用 1、二维数组的定义 一般格式: 类型说明符 数组名 [常量表达式1] [常量表达式2]; 其中…

JavaScript一维数组转二维数组

[1, 2, 3, 4, 5, 6, 7, 8] 实现效果 [[1, 2, 3, 4], [5, 6, 7, 8]] 1. slice截取 function fn(arr, num) {let newArr []const total Math.ceil(arr.length / num)console.log(total);for (let i 0; i < total; i) {a arr.slice(i * num, (i 1) * num)newArr…

js一维数组转二维数组(生成二维数组)

昨天遇到了一个需要对后端传来的一段数据做操作&#xff0c;是将一维数组转为二维数组&#xff0c;思考了半天&#xff0c;夜晚又和朋友讨论了一下&#xff0c;思路如下。&#xff08;毕竟我只是个切图仔&#xff09; let classRes [{className: 05,name: a1,age: 12,sex: 1},…

JS二维数组赋值问题

背景 定义二维数组并赋值 let list new Array(5).fill(new Array(3).fill(0))此时在给二维数组赋值时使用如下代码&#xff1a; list[2][1] 2看下赋值结束后的打印结果&#xff1a; 未达到预期。 ES6解析 我们看下阮一峰在es6中对fill的定义&#xff1a; 理解 这样就…

JavaScript 二维数组转一维数组

目录 1. flat() 2. reduceconcat 3. [ ].concat 4. concat.apply 5. toString split &#xff08;字符串或数值&#xff09; 6. 遍历判断 7.多维数组转一维数组 1. flat() 语法&#xff1a;var newArray arr.flat([depth]) depth(深度)&#xff1a;指定要提取嵌套数…

JavaScript生成二维数组

方法一&#xff1a; new Array(x).fill(new Array(y).fill(0)) 但注意&#xff0c;当一个对象被传递给fill方法时&#xff0c;填充数组的是这个对象的引用。即二维数组的第一个维度中的每一个数组都指向同一个引用&#xff0c;如果向第一个维度中的任一元素执行push&#xff0c…

js一维数组转二维数组

使用场景举例&#xff1a;接口返回一个数组对象&#xff0c;展示时每行固定显示n个&#xff0c;则可将返回的数组转成二维数组[[...n], [...n]...]的形式循环展示。 a.数组元素为基本类型&#xff1a; let baseArray [1, 2, 3, 4, 5, 6, 7, 8];len len baseArray.length;let …

js二维数组变为一维数组

1、用es5的reduce和concat组合 let list[[1,2,3],[4,5,6],[7,8],[9]]let listslist.reduce((a,b)>a.concat(b))console.log(lists)reduce的用法 数组方法reduce用来迭代一个数组&#xff0c;并且把他累积到一个值中。 使用 reduce 方法时&#xff0c;你要传入一个回调函数…

JavaScript 二维数组

二维数组&#xff1a;人为起的名字 二维数组本质上是以数组作为数组元素的数组&#xff0c;即“数组的数组”&#xff0c;类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵&#xff0c;行列数相等的矩阵称为方阵。对称矩阵a[i][j] a[j][i]&#xff0c;对角矩阵…

js 二维数组

js二维数组 我们经常会用到二维数组&#xff0c;但是javaScript没有二维数组&#xff0c;那么我们应该咋办呢&#xff1f;就是在一维数组里面在创建一个一维数组。 var arr new Array(10); for (var i 0; i < arr.length; i) {arr[i]new Array(8); //不一定写for循环赋值…

程序员必看的数组详解!

数组 什么是数组&#xff1f; 数组是一组数据有序的集合。数组它是属于复合数据类型。它至少可以存储一个值(它可以存储很多很多值)。 例如我们生活中的仓库&#xff0c;可以存放很多我们需要的工具或物品 为什么要使用数组&#xff1f; 因为在我们工作中 有很多数据是有关…

JavaScript二维数组和函数

一、二维数组 1、什么是二维数组&#xff1f; 通过两个下标&#xff08;索引&#xff09;来确定一个元素。二维数组可以理解为数组的数组。二维数组组织为矩阵&#xff0c;可以表示为行和列的集合。 2、创建方式 2.1、通过new Array&#xff08;&#xff09;创建 2.2、通过…

JavaScript之二维数组

JavaScript本身只支持一维数组&#xff0c;不支持直接定义二维数组&#xff0c;但是我们可以间接地实现二维数组 将一维数组的每个元素又定义为一个数组&#xff0c;即为数组中的元素也是数组&#xff0c;就是二维数组 <!DOCTYPE html> <html lang"en">…

Linux 信号signal\sigaction

转发&#xff1a;作者&#xff0c;故事狗 https://www.jianshu.com/p/f445bfeea40a Linux 信号signal 对于 Linux来说&#xff0c;实际信号是软中断&#xff0c;许多重要的程序都需要处理信号。信号&#xff0c;为 Linux 提供了一种处理异步事件的方法。比如&#xff0c;终端…

linux下sigaction函数,Linux sigaction函数 sa_flags的值

开始对sa_flags有疑问&#xff0c;网上搜到都是这一个程序&#xff0c;就复制来说事&#xff1a; 代码&#xff1a; 1 #include 2 #include 3 #include 4 #include 5 6 void show_handler (int sig) 7 { 8 printf ("i got signal %d\n",sig); 9 …

Linux signal、sigaction的使用总结

目录 一、什么是信号 二、信号的种类 三、信号的处理 —— signal()函数 四、信号处理 —— sigaction()函数&#xff08;扑获信号&#xff09; 五、扑获信号示例 一、什么是信号 信号是UNIX和Linux系统响应某些条件而产生的一个事件&#xff0c;接收到该信号的进程会相应地采取…

sigaction 函数

今天查一个问题&#xff0c;SIGWINCH的处理函数一直不执行&#xff0c;耽搁了不少时间&#xff0c;最后发现是另外一个地方也设置了&#xff0c;处理函数是另外的。。。。 顺便记录下使用例子&#xff1a; 使用 sigaction 函数&#xff1a; signal 函数的使用方法简单&#xf…

信号、signal 函数、sigaction 函数

文章目录 1.信号的基本概念2.利用 kill 命令发送信号3.信号处理的相关动作4.信号与 signal 函数4.1 signal 函数示例一4.2 signal 函数示例二 5.利用 sigaction 函数进行信号处理6.利用信号处理技术消灭僵尸进程 1.信号的基本概念 发送信号是进程之间常用的通信手段。信号用来…