Linux 定时任务调度(crontab)

news2024/11/26 4:18:17

一、Crontab

Crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

可以使用Crontab定时处理离线任务,比如每天凌晨2点更新数据等,经常用于系统任务调度。

1.1 服务启动和关闭

一般Linux系统中都会装有Crontab,如果没有安装可以使用包管理工具安装:

yum -y install vixie-cronyum -y install crontabs

Crontab服务的启动和关闭命令如下:

service crond start 
# 启动服务
service crond stop  
# 关闭服务
service crond restart   
# 重启服务
service crond reload    
# 重新载入配置
service crond status    
# 查看crontab服务状态

1.2 任务调度全局配置

crontab全局任务调度配置在如下的目录:

cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/
  • cron.daily是每天执行一次的job

  • cron.weekly是每个星期执行一次的job

  • cron.monthly是每月执行一次的job

  • cron.hourly是每个小时执行一次的job

  • cron.d是系统自动定期需要做的任务

  • crontab是设定定时任务执行文件

  • cron.deny文件就是用于控制不让哪些用户使用Crontab的功能

1.3 用户配置文件

每个用户都有自己的crontab配置文件,使用crontab -e命令进行编辑。保存后系统会自动存放与/var/spool/cron/目录中,文件以用户名命名。

linux的crontab服务每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容,crontab命令一览:

  • crontab -e: 编辑当前用户的定时任务列表

  • crontab -l: 查看当前用户的定时任务列表

  • crontab -r: 删除当前用户的定时任务列表

1.4 crontab定时任务格式

crontab每一条记录为一个定时任务,定时人遵循相应的定义规则。

img

其中前面的6个星号表示的含义如下:

内容含义说明:

项目含义范围
第一个”*“一小时当中的第几分钟0-59
第二个”*“一天当中的第几小时0-23
第三个”*“一个月当中的第几天1-31
第四个”*“一年当中的第几月1-12
第五个”*“一周当中的星期几0-7(0和7都代表星期日)
第六个command要执行的命令可以是系统命令,也可以是自己编写的脚本文件

每一个星号部分可用下面的特殊符号:

特殊字符代表意义
*代表任何时刻都接受的意思!举例来说,范例一内那个日、月、周都是 * ,就代表著 **不论何月、何日的礼拜几的 12:00 都运行后续命令 ** 的意思!
,代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:0 3,6 * * * command 时间参数还是有五栏,不过第二栏是 3,6 ,代表 3 与 6 都适用!(不能加空格)
-代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:20 8-12 * * * command 仔细看到第二栏变成 8-12 喔!代表 8,9,10,11,12 都适用的意思!
/n那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:*/5 * * * * command 很简单吧!用 * 与 /5 来搭配,也可以写成 0-59/5 ,相同意思!

1.5 Crontab命令

1.5.1 命令格式

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

1.5.2 命令功能

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

1.5.3 命令参数

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。

二、crontab定时任务实例

2.1 时间频次示例

注意,一般最好不要同时采用几号和每周几,可能会出现混淆;

时间表达式示例:

时间含义
10 * * * * 命令每小时的第10分钟执行一次命令
45 22 * * * 命令在22点45分执行命令
0 17 * * 1 命令每周1的17点0分执行命令
0 5 1,15 * * 命令每月1日和15日的凌晨5点0分执行命令
40 4 * * 1-5 命令每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令每月1日和15日,每周1的0点0分都会执行命令。 日和星期不是并且的关系,是或者的关系。
0 */10 * * * /usr/bin/curl http://www.baidu.com每10分钟定时请求一个地址
10 14 1 * * sh test.sh每个月的1号 14:10 运行
*/1 * * * * sh test.sh每分钟运行一次命令
59 23 * * 1,2,3,4,5 sh test.sh每个工作日23:59都进行备份作业。
59 23 * * 1-5 sh test.sh每个工作日23:59都进行备份作业。
10 0 * * * sh test.sh在 凌晨00:10运行

2.2 输入输出重定向

在上面更新数据定时任务的实例中,如果执行update.sh的时候有错误信息输出,会输出到哪儿呢?

在没有配置输出重定向的时候,定时任务会见错误输出到下面的文件:/var/log/mail/{$user},这是很不好的,我们往往需要把不同的脚本输出到不同的日志文件,方便查看脚本的执行情况,这个时候需要使用输出重定向。

58 23 * * * sh /home/work/update.sh >> /home/work/log/update.log 2>&1

Linux中使用0-3作为文件描述符来表示标准流。

名称类型文件描述符操作
stdin 标准输入standard input0<,<<
stdout 标准输出standard output1>,>>
stderr 标准错误输出standard error output22>,2>>

在上面的定时任务脚本中,update.sh后面的>>表示将输出追加到update.log文件中,2>&1表示标准错误输出重定向等同于标准输出。

正确、错误日志的输出是否写入到文件方法:

  1. 不输出任何内容(建议使用方法一)
*/1 * * * * /root/XXXX.sh >/dev/null 2>&1 
或
*/1 * * * * /root/XXXX.sh &>/dev/null    //&表示任何内容
  1. 将正确和错误日志都输出到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1
  1. 只输出正确日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log
或
*/1 * * * * /root/XXXX.sh 1> /tmp/load.log    //1可以省略
  1. 只输出错误日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh 2> /tmp/load.log

部分解释:

/dev/null 代表空设备文件
> 代表重定向到哪里
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

2.3 忽略输入nohup

有时候我们还会看到在定时任务脚本前面有一个nohup的命令,该命令用于指定后面的脚本忽略输入。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/update.log 2>&1

2.4 后台执行&

无论是在控制台直接执行,还是在定时任务脚本中,我们在某一条命令的最后面加上&符号,表示当前命令在后台运行,不占用控制台。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/update.log 2>&1 &

这里需要注意,如果执行的命令有等待输入的交互,把这个命令使用&放在后台运行时,它会一直等待输入,但是有没有输入,就卡住不动了。

2.5 时间处理

再回顾上面的更新任务,它是将每一天的运行结果都重定向到update.log文件,如果输出比较多,我们就需要每一天输出的不同的文件,可以通过在输出目录中指定日期用来分割。如下:

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/`update_"date +\%Y\%m\%d".log` 2>&1 &# 或者下面的形式58 23 * * * nohup sh /home/work/update.sh >> "/home/work/log/update_"date +\%Y\%m\%d".log" 2>&1 &

这里使用date函数,需要注意的是,crontab里面的脚本命令和直接在命令行运行的脚本可能是不一样的,尤其是date函数中的%需要转义。

可以直接在命令行运行下面命令:

sh /home/work/update.sh >> /home/work/log/update_`date +"%Y%m%d".log` 2>&1 &

达到和定时任务里面相同的效果,都是输出到update_20201120.log的文件。

但是如果直接在crontab中这样配置,则无法识别,不会执行该定时任务。下面的crontab任务是不会执行的,date函数将会报错。

58 23 * * * nohup sh /home/work/update.sh >> /home/work/log/`update_"date +%Y%m%d".log` 2>&1 &

附录A

A.1 注意事项

  1. 新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行

  2. 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

  3. 千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

A.2 参考博客

  • 『学了就忘』Linux系统定时任务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】冯.诺依曼体系结构与操作系统

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;冯.诺依曼体系结构什么是冯诺依曼体系结构&#xff1f;我们如今的计算机比如笔记本&#xff0c;或者是服务器&#xff0c;基本上都遵循冯诺依曼体系结构…

记一次web漏洞挖掘随笔

最近挖了一些漏洞。虽然重复了&#xff0c;但是有参考价值。这边给大家分享下。漏洞重复还是很难受的&#xff0c;转念一想&#xff0c;人生从不是事事如人意的&#xff0c;漏洞重复忽略&#xff0c;不代表失败。先来后到很重要&#xff0c;出场顺序很重要。1.某站rce 忽略理由…

Docker----------DockerFile解析

1. 是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;https://docs.docker.com/engine/reference/builder/ 1.编写Dockerfile文件 2.docker build命令构建镜像 3.docker run依镜像运行容器实例…

第47天|LeetCode392. 判断子序列、LeetCode392. 判断子序列

1.题目链接&#xff1a;392. 判断子序列 题目描述&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&…

Barra模型因子的构建及应用系列四之Residual Volatility因子

一、摘要 在前期的Barra模型系列文章中&#xff0c;我们构建了Size因子、Beta因子和Momentum因子&#xff0c;并分别创建了对应的单因子策略。本节文章将在该系列下进一步构建Residual Volatility因子&#xff0c;该策略在2022年以来跑赢大盘指数&#xff0c;且具有波动小的特…

Linux内核内存管理

目录 一、内核内存管理框架 二、内核中常用动态分配 2.1 kmalloc 2.2 vmalloc 2.3 kmalloc & vmalloc 的比较 2.4 分配选择原则&#xff1a; 三、IO访问-------访问外设控制器的寄存器 四、led驱动 1. 读原理图 2. 查阅SOC芯片手册 3. 编写驱动 一、内核内存管理…

Leetcode之消失的数字轮转数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、消失的数字一、消失的数字 二、旋转数组 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、消失的数字 这题找出消失的一个数字&#…

自行车出口欧盟CE认证,新版自行车标准ISO 4210:2023与ISO 8098:2023发布

2023年1月&#xff0c;国际标准化组织ISO发布了新版“自行车以及儿童自行车的测试标准”&#xff0c;即ISO 4210&#xff1a;2023以及ISO 8098:2023&#xff0c;用于取代了SO 4210&#xff1a;2015以及ISO 8098:2015。新版标准一经发布&#xff0c;立即生效。欧盟标准化委员会C…

使用 Python 抓取和优化所有网站图像

&#xff0c;我发布了一个通过FTP自动优化新图像的教程。这次我们将抓取整个网站&#xff0c;并在本地优化我们遇到的图像&#xff0c;按URL组织。请注意&#xff0c;这个简短但中级的脚本不适用于大型站点。首先&#xff0c;所有图像都转储到一个文件夹中。为每个页面创建一个…

ASP.NET 网站开发(联合增,删,改,查)

联合多表查询查询&#xff1a; linqDBDataContext db new linqDBDataContext(); stu d db.stu.Where(p > p.sid 2).FirstOrDefault(); if (d ! null) { var Marks d.marks; GridView1.DataSource Marks; GridView1.DataBind(); db.Su…

理解B树及B+树、B*树

目录 一.B树概念 二.B树插入思路 二.B树分部实现 1.树节点类 2.B树成员结构 3.查找函数 4.插入函数&#xff08;核心&#xff09; 5.插入关键值 6.中序遍历&#xff08;有序&#xff09; 三.B树实现总代码 四.B树性能分析 五.B树和B*树 1.B树 2.B*树 3.总结 六…

Android上架构建KeyStore应用签名

Android上架构建KeyStore应用签名Android上架构建KeyStore应用签名构建签名生成密钥读取填写使用Android上架构建KeyStore应用签名 我们的应用在上架前需要构建应用签名&#xff0c;使用的是Java进行构建 构建签名 需要有Java环境&#xff0c;注意尽量使用JDK8&#xff01;使…

CIMCAI super unmanned intelligent gate container damage detect

世界港航人工智能领军者企业CIMCAI中集飞瞳打造全球最先进超级智能闸口无人闸口ceaspectusG™视频流动态感知集装箱箱况残损检测箱况残损识别率99%以上&#xff0c;箱信息识别率99.95%以上World port shipping AI leader CIMCAIThe worlds most advanced super intelligent gat…

RK3588 PMIC/Power电路 PCB 设计指南

1、VDD_LOGIC&#xff0c;VDD_GPU&#xff0c;VDD_NPU&#xff0c;VDD_CPU电源的 DC-DC 远端反馈设计。100ohm反馈电阻需要靠近输出电容放置&#xff0c;电阻一端连接到 DC-DC 输出电容&#xff0c;另一端连接到PMIC 的VOUT 反馈脚上&#xff0c;并同时连接到 RK3588 电源管脚同…

网络信息安全(四)

IIS WEB服务器 服务器配置静态IP 安装WEB服务软件 打开软件 检查80端口是否打开 DNS解析不同域名站点 新建两个网页京东和淘宝 安装DNS组件并创建两个区域 新建主机 XP上指定DNS 正常情况下同一个服务器上一个端口只提供一个服务 添加主机头值 XP验证 IIS FTP服务器 FTP工作模式…

【20230221】【剑指1】排序(中等)II

1.最小的K个数sort直接用太无脑了&#xff0c;虽然底层实现也是快排&#xff0c;但是快排还是得会写啊快速排序快速排序算法有两个核心点&#xff0c;分别为 “哨兵划分” 和 “递归” 。哨兵划分操作&#xff1a; 以数组某个元素&#xff08;一般选取首元素&#xff09;为 基准…

教你编写SQLMap的Tamper脚本过狗

测试环境 最新版某狗 测试方法 安全狗其实是比较好绕的WAF&#xff0c;绕过方法很多&#xff0c;但这里我们就用一种&#xff1a;注释混淆 一招鲜吃遍天 注释混淆&#xff0c;其实就是在敏感位置添加垃圾字符注释&#xff0c;常用的垃圾字符有/、!、*、%等 这里再解释一下…

nodejs基于vue高校学报论文在线投稿系统

在新发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个性的需求。在这种时代背景下&#xff0c;高校只能以工作人员为导向&#xff0c;以稿件的持续创新作为高校最重要的竞争手段。 可定制框架:ssm/Sprin…

铅酸蓄电池废水除铅项目,出水做到0.05mg/l

某集团公司铅酸蓄电池废水除铅项目 工艺选择 沉淀系统过滤系统螯合树脂除铅系统 工艺原理 铅离子沉淀后进入螯合树脂除铅树脂 项目背景 铅酸蓄电池具有可逆性、电压特性平稳、放电量大、造价低廉等优点&#xff0c;应用于国民经济各个领域&#xff0c;但在其生产过程中&…

vue3 布局样式的原理

style scoped <style scoped > 它的 CSS 只作用于当前组件中的元素&#xff0c;如果子组件只有一个根元素&#xff0c;也会被渗透 原理&#xff1a; 当我们再组建中使用scoped时&#xff0c;vue会自动为组件中所有元素生成一个随机的属性&#xff0c;形如&#xff1a;da…