crontab自动执行任务,失败原因记录
服务器上使用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自动执行任务,失败原因记录相关推荐
- VB-01语音模块wav音频转c代码失败原因记录
VB-01语音模块wav音频转c代码失败原因记录 项目场景: 提示:通过安信可的VB-01模块实现语音播报功能 问题描述: 提示:使用官方提供的"WnvcEncoderTool_200922 ...
- 自动执行一个php文件,使用crontab自动执行php文件
启动linux定时服务:service crond start 查看当前定时任务: crontab -l 添加新定时任务:crontab -e 先是测试crontab对于普通任务能否执行: */1 * ...
- crontab 不能执行的原因
最近经常碰到关于crontab不能执行的,初步总结了有以下几个原因: 第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概 ...
- 定时执行失败原因分析
.脚本语法错误 在crontab脚本没有定时执行的时候,首先需要检查脚本的语法有没有出现问题. 2.环境变量问题 有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有 ...
- Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案
Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案 实际开发场景 需要开发一个Flink监控程序,初步使用shell脚本进行监控,如果发现失败了,则自动重新运行Flink命令 ...
- Linux中的定时自动执行功能(at,crontab)
Linux中的定时自动执行功能(at,crontab) 概念 在Linux系统中,提供了两种提前对工作进行安排的方式 at 只执行一次 crontab 周期性重复执行 通过对这两个工具的应用可以让我们 ...
- JAVA 之POI导入批量新增、批量检查、日志记录、失败原因、失败条数、数据库映射
前言 欢迎大家来到我的博客,请各位看客们点赞.收藏.关注三连! 欢迎大家关注我的知识库,Java之从零开始·语雀 你的关注就是我前进的动力! CSDN专注于问题解决的博客记录,语雀专注于知识的收集与汇 ...
- python记录鼠标键盘操作自动执行重复工作
系列文章目录 文章目录 系列文章目录 前言 github项目原地址 一.执行方法 二.python录制 1.Frame1.py 2.KeymouseGo.py 三.说明书 KeymouseGo v2. ...
- Java动态代理invoke方法自动执行的原因
Java动态代理invoke方法自动执行的原因 在动态代理中,一般的是先调用Proxy.newProxyInstance()生成代理对象,然后通过调用代理对象的对应方法来实现增强,这里假设代理了被代理 ...
最新文章
- 深入理解MySQL执行过程及执行顺序
- 【数字信号处理】相关函数 ( 能量信号 | 能量信号的互相关函数 | 能量信号的自相关函数 )
- Tomcat forward debug - how is jsp file served in Tomcat
- 返回对应对象的克隆方法
- __doPostBack简单的使用方法
- IE Firefox通用DOM
- python process_Python Process/Thread 概念整理
- Maven的帮助文档ー查看各个插件的作用--- 【maven-assembly-plugin】
- NC158 有向无环图的单源最短路径问题:Dijkstra算法
- 使用ShowDoc在线管理API接口文档
- 稳定的货源社区源码分享丨新版云乐购免费开源
- python数据拟合方法_Python-最小二乘法曲线拟合【转载】
- 用PS制作电子签名方法总结
- 记2015年的腾讯校招经历——状态篇
- java 下载文件的文件名乱码_详细解决java文件下载文件名乱码问题
- 微信公众号:weixin-js-sdk使用总结
- 最近收集的一些酷炫的UI界面设计
- Python中的getattr、__getattr__、__getattribute__、__get__
- 为什么敏捷方法能在软件开发中行之有效
- Oracle中用system存数据,【学习笔记】Oracle表空间 数据存放system表空间影响数据库性能...
热门文章
- centos安装mysql8_Docker 快速安装 Mysql
- var radioname = new array();_体坛观察丨争议判罚不止中超 为何VAR屡成足坛焦点?_足球...
- python sys.modules
- click Documenting Scripts
- VSCode Vim
- shell 特殊符号
- java 接口案例
- R语言分类算法之线性判别分析(Linear Discriminant Analysis)
- css文字不被点击,css 让文字不被选中之-moz-user-select 属性介绍
- 微型计算机原理及应用 课程设计,《微型计算机原理及其应用》课程设计.docx