cron定时任务(shell定时任务)

前言

Cron 是一个在 Unix、linux(可以理解为 unix 内核自带的) 操作系统中用于设定周期性被执行的工作的工具,Cron 时间表达式 用于指定这些工作执行的准确时间

其可以帮助我们更好的维护系统或者项目正常运行,因此也是必须要了解技能(一般运维用的比较多,开发也可以用)

下面我们先认识 cron 时间表达式,然后再让其和 shell 结合,完成我们更加复杂的任务

cron 时间表达式

cron 时间表达式 应用在 Unix、linux 一共有 5 位(有些可能支持 6 位)

例如: * * * * * (中间有空格)

其分别代表着 分、时、天、月、星期、年(可选有些支持有些不支持)

基础规则

默认 * 代表全部时间段,即:

  • : 1 小时中的 0 ~ 59 分;
  • : 1 天的 0 ~ 23 时;
  • :一个月的 1 ~ 31 天;
  • :一年的 1 ~ 12 月
  • 星期:一个星期的 周日 ~ 周日(0 ~ 7),0 和 7 都是周日(和天冲突,不能同时存在)
  • 年(可选):某一年,例如:2023、2024,一般不使用,可能都不存在这个参数
js 复制代码
//代表每小时的第一分钟
1 * * * *

//代表每天2点1分
1 2 * * *

//代表每个月1号的2点1分
1 2 1 * *

//代表每年第2个月1号的2点1分
1 2 1 2 *

//代表每周2的2点1分(很少用),且星期和天是冲突的
1 2 * * 2

//代表每年2月每周2的2点1分(很少用),且星期和天是冲突的
1 2 * 2 2

多个时间节点(,)

同一种时间节点数字中间取 ,,表示在多个时间节点执行任务,例如:每小时的 15,45分 执行

js 复制代码
//每小时的 15分 45分 分别执行一次任务
15,45 * * * *

//每天的0点、12点时,其 15分 45分 分别执行一次人物
15,45 0,12 * * *

时间区间(-)

除了多个时间节点,还有多个 时间区间,时间区间就是表示区间,使用 - 间隔开,例如:每天 9点到6点 期间,每小时的 15 执行任务

js 复制代码
//朝九晚五工作期间,每小时的15分、45分分别执行某任务
15,45 9-6 * * *

时间间隔-每多少时间(/)

时间间隔,每多少时间运行一次任务,也比较常用,指定单位的表达式尾部 / + 间隔时间,例如:每30分钟执行一次

js 复制代码
//每 30 分钟执行一次
*/30 * * * *

//每两个小时 0 时执行一次
0 */2 * * *

//每周日的凌晨3点整执行任务
0 3 * * 7

时间表达式使用注意

除了上面时间表达式基础使用之外,其他表达式符号可以结合使用,使用过程中更有一些小的注意事项

  • 星期和天冲突,冲突时,两者其一,使用其中一个,另一个填写 * 即可
  • 使用位阶比较高的时间表达式时,位阶较低的需要给值,例如:每周一执行(错),每周一的0点0分执行(正确)
  • 多个时间节点(,)和时间间隔(/),不要一起使用,表达意义有问题
  • 等等,通过时间表达式翻译到分是,没问题的就没问题,都有问题的不要使用就是了

结合 cron 表达式,编辑定时任务(shell定时任务)

Unix、linux 设置定时任务,需要用到 crontab 命令调用( mac 不行哈,我是执行失败了,linux 可以,要是在 mac 执行成功的,可以在文章留个言,多谢 😂)

crontal 命令

js 复制代码
//查看当前所有计时器任务
crontab -l

//编辑所有计时器任务,新添加的会生效,删除的会失效,修改保存即生效
crontab -e

设置计时器任务执行指令

使用 crontab -e 命令时,会进入计时器编辑页面,会显示出所有已经有的计时任务(没设置就是空),我们在下面添加一个我们自己的计时任务就行了,任务结构 cron表达式 + 指令任务

js 复制代码
// 使用 crontab -e 打开编辑页面后,增加下面执行
// 每30分钟执行任务,这里往文件写入内容
*/30 * * * * echo "写入的新内容!" >> /root/123.txt

设置计时器任务执行 shell 脚本

和上面的执行指定类似,使用 crontab -e 命令,进入计时器编辑页面,添加我们的新任务

cron表达式 + shell脚本的绝对路径

js 复制代码
//每三十分钟,执行 /root 路径下的 test.sh 脚本
*/30 * * * * /root/test.sh

执行命令和脚本注意

涉及到路径、位置的(例如:脚本路径、导入文件路径等),需要使用绝对路径,否则会执行失败,或者文件会导入到非正确的目录下

相关推荐
彭泽布衣42 分钟前
为什么 mac os .bashrc 没有自动加载?
shell·mac os
Johny_Zhao6 小时前
Ubuntu安装部署Zabbix网络监控平台和设备配置添加
linux·网络·mysql·网络安全·信息安全·云计算·apache·zabbix·shell·yum源·系统运维·itsm
嘿嘻哈呀7 小时前
命令行解释器中shell、bash和zsh的区别
bash·shell·zsh·命令行解释器
Johny_Zhao1 天前
K8S+nginx+MYSQL+TOMCAT高可用架构企业自建网站
linux·网络·mysql·nginx·网络安全·信息安全·tomcat·云计算·shell·yum源·系统运维·itsm
Johny_Zhao3 天前
思科安全大模型SOC作业应用分析
linux·网络·人工智能·网络安全·ai·信息安全·云计算·shell·devops·cisco·yum源·系统运维·itsm
Johny_Zhao7 天前
阿里云Ansible自动化运维平台部署
linux·人工智能·ai·信息安全·云计算·ansible·shell·yum源·系统运维·itsm
一刀到底2119 天前
从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化
linux·数据库·shell
一刀到底21110 天前
从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高
linux·服务器·shell
Johny_Zhao10 天前
Oracle、MySQL、SQL Server、PostgreSQL、Redis 五大数据库的区别
linux·redis·sql·mysql·信息安全·oracle·云计算·shell·yum源·系统运维
Johny_Zhao11 天前
在Ubuntu Server上安装Checkmk监控系统
linux·人工智能·网络安全·信息安全·云计算·shell·yum源·系统运维·checkmk