crontab使用进程锁解决冲突

本文发布时间: 2019-Mar-22
如果在crontab里有个定时任务设置为一分钟执行一次,但是它执行的时间可能会超过一分钟,此时crontab一分钟后会再次运行该脚本,这样就会出现冲突,如果程序不做容错处理,可能会导致出现一些问题。如果想解决这个问题,可以用Linux中的进程锁控制crontab执行的并发问题。给一个shell脚本加锁,使用flock命令。一般格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command…常用选项:-s, –shared :获得一个共享的锁。-x, –exclusive :获得一个独占的锁。-u, –unlock :移除一个锁,通常是不需要的,脚本执行完后会自动丢弃锁。-n, –nonblock :如果没有立即获得锁直接失败而不是等待。-w, –timeout :如果没有立即获得锁就等待指定的时间。-o, –close :在运行命令前关闭文件的描述符。用于如果命令产生子进程时会不受锁的管控。-c, –command :在shell中运行一个单独的命令。-h, –help :显示帮助。-V, –version :显示版本。测试一下看看:在个人的home目录下建立一个test.sh。vim /home/fukun/test.sh输入:#!/bin/bashwget –limit-rate=200k -P /tmp http:///100mb.test运行一个超过一分钟的命令。chmod +x /home/fukun/test.sh编辑crontab:crontab -e输入:*/1 * * * * /usr/bin/flock -xn /var/run/test.lock -c ‘/home/fukun/test.sh’设置每一分钟执行一次,获得一个独占锁,并且如果没有立即获得锁直接失败而不是等待。重启服务:service crond restart这样只有第一个进程执行完毕后,才会执行当前的下一个进程。在第一个进程执行过程中,下一分钟crontab运行flock检测到获得不了锁,就直接退出,直到第一个进程执行完,flock再次获得锁。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:11pm
栏目列表