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日

相关推荐

  • 安装 gcc-c++ 时报错和原有 gcc 版本冲突

    CentOS 6.7 安装 gcc-c++时报下面的错误: Resolving Dependencies–> Running transaction check&…

    CentOS 2025年6月20日
  • CentOS7.2下Hadoop2.7.2集群搭建

    centos7.2下Hadoop2.7.2的集群搭建 1.基本环境:操作系统:    Centos 7.2.1511三台虚机:    192…

    CentOS 2025年6月12日
  • CentOS 6.8 编译安装MySQL 5.6.23

    安装环境:centos 6.8,mysql 5.6.23一、编译安装MySQL前准备工作 安装编译源码所需的工具和库yum -y install gcc gcc-c++ ncurs…

    CentOS 2025年6月8日
  • Kickstart实现自动部署CentOS

    工作中,我们有时候需要安装几十上百台服务器,这种情况下用u盘或者光驱逐台安装,太花时间与人力,显然不现实,所以应该选择自动化部署操作系统的方式,自动化部署操作系统的工具有很多,这里…

    CentOS 2025年6月8日
  • CentOS 6.5全新安装Firefox45.2浏览器脚本

    在centos 6.5x86_64系统中自带的是firefox 17版,版本太低,由于腾讯云实验室需要在firefox浏览器45版或45版以上的版本来支持,否则无法进入腾讯云实验室…

    CentOS 2025年6月22日
  • CentOS 7下MongoDB 3.4 集群搭建之分片+副本集PDF

    MongoDB是最常用的nodql数据库,在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的MongoDB(分片+副本)集群。 在搭建集群之前,需要首先了解几个概念:路由…

    CentOS 2025年6月16日
  • CentOS 7发布内核修复补丁 修复“Dirty COW”提权漏洞

    今天,centos维护成员和项目负责人Jojnny Hughes在社区中发布公告称这款面向服务器基于Linux的操作系统–CentOS 7上线重大内核更新。在今天的Ce…

    CentOS 2025年6月29日
  • CentOS7.2编译安装LNMP

    一、前言 1、环境说明 基础环境linux+Nginx+mysql+php Linux:centos7.2 Nginx:1.10.2 MySQL:5.6.17 PHP:5.5.12…

    CentOS 2025年6月8日
  • PXE实现批量无人值守安装CentOS7系统

    通过传统的方式安装和部署计算机时,都需要人工干预的方式完成安装。如果需要部署大量的类似功能的工作站或服务器,则需要耗费大量的时间。同时传统的安装方式,每台计算机都需要光驱设备及安装…

    CentOS 2025年6月11日
  • CentOS 6.7安装MySQL

    我的机器:centos 6.7 64位(minimal安装) 安装的mysql: MySQL 5.6 安装过程充满坎坷……(缺少实践) 下载 使用免编译二进制包 [root@lin…

    CentOS 2025年6月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注