服务器上使用crontab部署这两个每分钟自动执行的命令。首先,这两个命令是之前的人部署的,在我接手之前,就一直在了的。根据命令,实际上应该是做到每分钟都执行一次脚本。但是实际操作中,却发现,其实并没有严格的按照每分钟一次执行,有时候是两三分钟才会执行一次。因为这个延迟并不是特别影响实际应用,所以我一直没有很重视这个问题。

昨天因为需求,在服务器上又部署了一套服务,定时任务加到了三条。因为服务是相似的,所以我没有多想的直接复制了上一条定时任务的命令,只是修改了一下文件路径。然后晚上就发生了定时任务执行失败的问题。也不是一直失败,就是从每分钟一次,变成了十几分钟一次。非常的影响效率。

对此我很疑惑,为什么我只是加了一个命令,定时任务的执行时间就不对了。我开始上网找原因,我看过了大家各种各样的crontab踩坑记录,但是没有一条是符合我的情况的。知道我发现了这篇 https://blog.csdn.net/qivan/article/details/53836426 。虽然对方记录了四种常见的,能解决大部分情况的踩坑记录,但是和我的情况还是不符。那么我为什么会专门提起这篇呢,因为我发现,虽然对方记录的解决方法并不能帮助到我,但是文章中提到的第四种情况,加文件锁的方法,给了我启发。

使用linux flock 文件锁,可以避免任务的重复执行,所以一般情况是,针对执行频率快的命令,推荐加上锁。通过对文件锁命令的了解,我发现了我问题所在。

flock命令详解如下:

-s, --shared: 获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, --timeout: 如果没有立即获得锁,等待指定时间
-o, --close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command: 在shell中运行一个单独的命令
-h, --help 显示帮助
-V, --version: 显示版本

查看一下我的文件锁命令  flock -xn /tmp/yuxiu.lock -c      我用上了xn这两个命令,但看这个命令,其实是个很平常的命令,没有任何问题。但是我三个定时任务,用的都是这个命令。三个命令使用同一个独占锁,且没有立即获得锁,任务即算失败。所以一分钟之内,三个命令只会有一个命令是成功执行的,剩下两个就会失败。之前只有两个命令同时抢一个独占锁,所以有时候会有三四分钟的延迟。现在是三个命令抢一个锁。。这个等待时间就延长了。

所以解决办法也很简单,把其中两个任务的锁名改一下就好,每个命令有一个单独的文件锁。或者修改一下命令,把锁属性从独占锁变为共享锁。都可以解决这个问题。

通过这件事,不止学习了解到了flock命令,还需要记住一点,就是不能放过任何一个小细节。

转载于:https://www.cnblogs.com/zhuxiangru/p/11171316.html

crontab自动执行任务,失败原因记录相关推荐

  1. VB-01语音模块wav音频转c代码失败原因记录

    VB-01语音模块wav音频转c代码失败原因记录 项目场景: 提示:通过安信可的VB-01模块实现语音播报功能 问题描述: 提示:使用官方提供的"WnvcEncoderTool_200922 ...

  2. 自动执行一个php文件,使用crontab自动执行php文件

    启动linux定时服务:service crond start 查看当前定时任务: crontab -l 添加新定时任务:crontab -e 先是测试crontab对于普通任务能否执行: */1 * ...

  3. crontab 不能执行的原因

    最近经常碰到关于crontab不能执行的,初步总结了有以下几个原因: 第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概 ...

  4. 定时执行失败原因分析

    .脚本语法错误 在crontab脚本没有定时执行的时候,首先需要检查脚本的语法有没有出现问题. 2.环境变量问题 有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有 ...

  5. Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案

    Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案 实际开发场景 需要开发一个Flink监控程序,初步使用shell脚本进行监控,如果发现失败了,则自动重新运行Flink命令 ...

  6. Linux中的定时自动执行功能(at,crontab)

    Linux中的定时自动执行功能(at,crontab) 概念 在Linux系统中,提供了两种提前对工作进行安排的方式 at 只执行一次 crontab 周期性重复执行 通过对这两个工具的应用可以让我们 ...

  7. JAVA 之POI导入批量新增、批量检查、日志记录、失败原因、失败条数、数据库映射

    前言 欢迎大家来到我的博客,请各位看客们点赞.收藏.关注三连! 欢迎大家关注我的知识库,Java之从零开始·语雀 你的关注就是我前进的动力! CSDN专注于问题解决的博客记录,语雀专注于知识的收集与汇 ...

  8. python记录鼠标键盘操作自动执行重复工作

    系列文章目录 文章目录 系列文章目录 前言 github项目原地址 一.执行方法 二.python录制 1.Frame1.py 2.KeymouseGo.py 三.说明书 KeymouseGo v2. ...

  9. Java动态代理invoke方法自动执行的原因

    Java动态代理invoke方法自动执行的原因 在动态代理中,一般的是先调用Proxy.newProxyInstance()生成代理对象,然后通过调用代理对象的对应方法来实现增强,这里假设代理了被代理 ...

最新文章

  1. 深入理解MySQL执行过程及执行顺序
  2. 【数字信号处理】相关函数 ( 能量信号 | 能量信号的互相关函数 | 能量信号的自相关函数 )
  3. Tomcat forward debug - how is jsp file served in Tomcat
  4. 返回对应对象的克隆方法
  5. __doPostBack简单的使用方法
  6. IE Firefox通用DOM
  7. python process_Python Process/Thread 概念整理
  8. Maven的帮助文档ー查看各个插件的作用--- 【maven-assembly-plugin】
  9. NC158 有向无环图的单源最短路径问题:Dijkstra算法
  10. 使用ShowDoc在线管理API接口文档
  11. 稳定的货源社区源码分享丨新版云乐购免费开源
  12. python数据拟合方法_Python-最小二乘法曲线拟合【转载】
  13. 用PS制作电子签名方法总结
  14. 记2015年的腾讯校招经历——状态篇
  15. java 下载文件的文件名乱码_详细解决java文件下载文件名乱码问题
  16. 微信公众号:weixin-js-sdk使用总结
  17. 最近收集的一些酷炫的UI界面设计
  18. Python中的getattr、__getattr__、__getattribute__、__get__
  19. 为什么敏捷方法能在软件开发中行之有效
  20. Oracle中用system存数据,【学习笔记】Oracle表空间 数据存放system表空间影响数据库性能...

热门文章

  1. centos安装mysql8_Docker 快速安装 Mysql
  2. var radioname = new array();_体坛观察丨争议判罚不止中超 为何VAR屡成足坛焦点?_足球...
  3. python sys.modules
  4. click Documenting Scripts
  5. VSCode Vim
  6. shell 特殊符号
  7. java 接口案例
  8. R语言分类算法之线性判别分析(Linear Discriminant Analysis)
  9. css文字不被点击,css 让文字不被选中之-moz-user-select 属性介绍
  10. 微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx