Centos flock 防止脚本重复运行

如果crontab设定任务每分钟执行一次,但执行的任务需要花费5分钟,这时系统会再执行导致两个相同的任务在执行。发生这种情况下可能会出现一些并发问题,严重时会导致出现脏数据性能瓶颈等恶性循环。

如果crontab设定任务每分钟执行一次,但执行的任务需要花费5分钟,这时系统会再执行导致两个相同的任务在执行。 发生这种情况下可能会出现一些并发问题,严重时会导致出现脏数据性能瓶颈等恶性循环。 为了防止这种情况,可以使用flock建立排它锁。

例:

# /tmp/sleeptest.sh

#!/bin/bash
# Sleep
# PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# export PATH
echo ""
echo "*****************************************"
echo "start time `date '+%Y-%m-%d %H:%M:%S'`   "
sleep 300s
echo "finish time `date '+%Y-%m-%d %H:%M:%S'`  "
echo "*****************************************"

计划任务

# crontab -e
*/1 * * * *  /tmp/sleeptest.sh >> /tmp/sleeptest.log

查看进程

#ps aux | grep sleeptest.sh | wc -l
2

(每分钟都会增加一个,说明shell重复执行中)

flock锁

使用flock建立排它锁,如果对进程加了排他锁其他进程无法加锁, 可以选择等待超时或马上返回。

flock [-sxun][-w #]
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:   显示版本
-w 等待时间,秒

添加锁

*/1 * * * * flock -xn /tmp/sleeptest.lock -c /tmp/sleeptest.sh >> /tmp/sleeptest.log
## -x 独占锁 -n 直接失败 如发现被锁如就失败不等待,除非解锁。

*/1 * * * * flock -x -w 30 /tmp/sleeptest.lock -c /tmp/sleeptest.sh >> /tmp/sleeptest.log
## 如发现被锁等30秒,解锁成功的话就执行。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/11450.html

(0)
晴川运维晴川运维
上一篇 2025年7月3日
下一篇 2025年7月3日

相关推荐

  • CentOS 7.5单机安装Kubernetes

    1.系统配置 centos 7.5 Docker 1.13.1 2.关闭防火墙,selinux,swapoff systemctl disable firewalldsystemc…

    CentOS 2025年6月9日
  • CentOS 7安装 MySQL5.7.19

    环境:虚拟机+centos 7 1.下载二进制包,下面mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz链接是官网 cd /usr/lo…

    CentOS 2025年7月10日
  • CentOS yum的配置文件 repo文件详解

    什么是repo文件?repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件…

    CentOS 2025年7月3日
  • Centos中搭建私有Git服务器

    GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有…

    CentOS 2025年10月9日
  • CentOS7中禁用Transparent Huge Pages

    自CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据…

    CentOS 2025年9月24日
  • CentOS 6.5安装MySQL 5.6.10及安全配置

    注:以下所有操作均在centos 6.5 x86_64位系统下完成。 #准备工作# 在安装mysql之前,请确保已经使用yum安装了各类基础组件,具体见下面的《CentOS安装LN…

    CentOS 2025年6月15日
  • CentOS 7使用Nginx+MariaDB+PHP安装Nextcloud 13

    在这篇文章中,我将向你展示如何在 centos 7 服务器中安装和配置最新版本的 Nextcloud 13。我会通过 Nginx 和 php7-FPM 来运行 Nextcloud,…

    CentOS 2025年6月4日
  • CentOS下使用Postfix + Dovecot + Dnsmasq搭建简易局域网邮件系统

    背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看。 那就在CentOS下搭一个局域网内的邮…

    CentOS 2025年10月11日
  • CentOS 5.5内核升级 安装iotop

    Linux中的iotop命令主要用于显示硬盘IO,但该命令只存在于kernelv2.6.20之后的版本, 那么要如何安装iotop命令呢?下面小编就给大家介绍下如何在Linux上安…

    CentOS 2025年10月11日
  • CentOS 7下MySQL5.7.23的服务配置参数测试

    centos 7默认安装mysql5.7.23,服务管理发生了变化,从sysvinit(service mysql start)变化为systemd(systemctl start…

    CentOS 2025年6月8日

发表回复

登录后才能评论