Crontab每小时运行一次的正确写法

33f4c8951e6bda46b1b393a7fab20d79.png

crontab是一种在Unix和类Unix系统上用于定期执行任务的命令。它是一个用于管理、编辑和查询用户定时任务的命令行工具。通过使用crontab,用户可以创建、编辑和管理定时任务,使得指定的命令、脚本或程序在预定的时间点自动运行。

crontab命令使用一种特定的格式来表示定时任务的执行时间。这个格式由五个时间字段组成,分别表示分钟、小时、日期、月份和星期几。用户可以根据需要使用通配符(*)或具体的数值来指定时间。例如,“30 2 * * 1-5”表示每周一至周五的凌晨2点30分执行任务。

在Unix系统上,有两种类型的crontab:用户级别和系统级别。用户级别的crontab是每个用户独立的,只对该用户有效。系统级别的crontab适用于整个系统,对所有用户有效。系统级别的crontab一般由管理员管理和配置。

使用crontab命令可以创建、编辑和管理crontab。例如,“crontab -e”命令可以编辑当前用户的crontab文件。通过编辑文件,用户可以添加、修改或删除定时任务。其他常用的crontab命令包括“crontab -l”(列出当前用户的crontab内容)和“crontab -r”(删除当前用户的crontab)。

crontab执行的任务会生成日志和错误信息。这些信息通常被发送到当前用户的邮件,以便及时了解任务的执行情况。用户可以配置邮箱或重定向输出来处理任务执行过程中的日志和错误信息。

crontab在系统管理和自动化任务中非常常见。它可以用于备份数据、定期清理临时文件、运行脚本、执行定时监控任务等。通过合理配置crontab,可以轻松实现定时任务的自动化管理。

cac9338791609466c8587e892ce994fc.png

对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法:

00 *   * * *  #每隔一小时执行一次
00 */1 * * *  #与上面是相同的任务

这种是正确的吗?对照最前面给出的语法格式来看,这个定时任务在0分、每小时、每天、每月、每星期执行,看起来似乎很合理啊?前一个小时的0分和后一个小时的0分不就是相隔一个小时吗?这样的话不就是每隔一个小时执行吗?再仔细看看,好像有点不对劲,为什么是每小时的0分?如果我在11:55创建了定时任务,希望每小时执行一次,那么接下来这个定时任务是在12:55执行,还是在12:00执行?很显然,它是每小时的0分执行,也就是在12:00执行。

似乎没区别?那么请思考下,每隔3小时执行如何写?

网上给出的写法如下:

0 */3 * * * #错误的每隔3小时执行一次写法

这种也是错误的写法,这种能充分展示前面一小时执行一次带来的迷惑感,这种写法其实是每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行,并不是真正意义上每隔3个小时执行,如同前面类似,如果你在11:56创建这种每3小时的定时任务,那么它会在12点就开始执行,而不是14:56执行。请看如下验证:

11:56分创建上面所谓的“每3小时执行一次”的定时任务:

d9f655e35bd7e6465f0e1a5779bf9dc1.pngdce40fcd666e6cd288a66eacccf575fb.png

4分钟后而不是3小时后,crontab执行了该定时任务:

adeccb5c6d9dca0ad725118da77c9350.pngb2eae6ddcec0f379a03f51c0059e6448.png

事实上,对于这种 "0 */3 * * * " 这种分钟时间点固定,小时按每小时或者每3小时的写法,都是从1点开始算倍数,比如每一小时就是1点、2点、3点,而每2小时就是2点、4点、6点,每3小时就是3点、6点、9点等等,以此类推。

除此之外,网上还有人给出这种的每小时执行一次的定时任务写法:

* */1 * * * #错误的每隔一小时执行一次,事实上每分钟执行一次

这种比前面那种还不如,它压根不是每小时执行,而是每分钟执行!为什么?因为分钟要求的是每分钟执行,而小时却要求每一个小时执行,这2个分明是冲突的时间策略。最终以分钟为准,所以它是每分钟执行一次。

真正的每隔一小时、每隔105分钟执行的定时任务应该如何写呢?如下:

*/60  * * * * #每60分钟即每小时执行一次
*/105 * * * * #每105分钟执行一次

✨✨ 欢迎关注 ✨✨

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值