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命令,还需要记住一点,就是不能放过任何一个小细节。
crontab自动执行任务,失败原因记录的更多相关文章
- crontab 自动执行脚本
crontab -e ================>自动执行某脚本!!!!!!! 1001 ls 1002 cd /home/wwwroot/default/ 1003 ls 1004 cr ...
- 如何在win10下使用Ubuntu中的crontab自动执行任务
win10下如何下载ubuntu 1.打开Microsoft Store,搜索ubuntu,选择其一(我选了第一个),点击获取,耐心等待安装即可: 2.安装完成可在开始栏找到: 使用cront ...
- UNIX crontab自动执行脚本
crontab 是不会加载环境变量的你手动执行可以是因为登录了oracle用户加载了环境变量,你可以在脚本里添加,echo $ORACLE_HOME echo $ORACLE_SID 等等试试,看看 ...
- ubi 文件系统加载失败原因记录
尝试升级 kernel 到 4.4.12版本,然后出现 kernel 加载 ubi 文件系统失败的现象,现象如下 [ 3.152220] ubi0 error: vtbl_check: too lar ...
- 手动执行脚本可以运行,crontab自动执行无效的解决方法
在需要执行的脚本里加入环境变量即可,如下图:
- ubuntu cron 及 crontab 自动执行任务
Add the below line (with tweaks) to the end of /etc/crontab: 30 23 * * * root shutdown -h now At 23: ...
- crontab定时执行shell脚本失败的原因
有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...
- Crontab无法自动执行,直接运行脚本却能执行
Crontab无法自动执行,直接运行脚本却能执行 http://bbs.chinaunix.net/thread-1926428-1-1.html crontab -e crontab内容为* * * ...
- Linux中的定时自动执行功能(at,crontab)
Linux中的定时自动执行功能(at,crontab) 概念 在Linux系统中,提供了两种提前对工作进行安排的方式 at 只执行一次 crontab 周期性重复执行 通过对这两个工具的应用可以让我们 ...
随机推荐
- 垂直口风琴菜单3(jquery)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- sparkStreaming复习笔记(1)
一.SparkStreaming 1.sparkcore模块的扩展,具有可扩展,高吞吐量,容错机制,针对实时数据流处理,数据可以来自于kafka,flume以及tcp套接字,可以使用更加复杂的函数来进 ...
- JS对象总结
JS对象总结 复习: 1.1 JS中对象有三种:内置对象(数组Array对象.String字符串对象.RegExp正则表达式对象.Math对象). 宿主对象(JS脚本所在的运行环境,目前我们讲的脚 ...
- HTTPS证书转换成PEM格式
PEM 格式的证书文件(*.pem)一般为以下格式: 注意:PEM 格式证书文件可用 notepad++ 等文本编辑器打开. CER / CRT 格式证书转换为 PEM 格式 对于 CER / CRT ...
- ASE Alpha Sprint - backend scrum 3
本次scrum于2019.11.7再sky garden进行,持续10分钟. 参与人: Zhikai Chen, Jia Ning, Hao Wang 请假: Xin Kang, Lihao Ran, ...
- Codeforces Round #421 (Div. 2) - A
题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...
- qt05 音乐播放器
这些步骤可实现音乐播放,但是列表不能显示 music = new QMediaPlayer(this); playlist = new QMediaPlaylist(this); playlist-& ...
- 【LeetCode】哈希表 hash_table(共88题)
[1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target ...
- java并发学习--第四章 JDK提供的线程原子性操作工具类
在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS ...
- Java常用类库API之数字处理工具类
数字处理工具类BigDecimal和DecimalFormat Java提供的java.text.DecimalFormat类,帮助我们用最快的速度将数据格式化为我们想要的样子.例如,取两位小数 im ...