使用Bash脚本确保定时任务的单例执行

server/2024/12/23 3:45:25/

简介:

在Linux系统中,定时任务是自动化运维的重要组成部分。然而,有时候我们可能需要确保某个定时任务在任何给定时间点只运行一次,以避免资源冲突或数据不一致。本文将介绍如何使用Bash脚本和文件锁来实现单例定时任务。

什么是锁文件

锁文件是一种简单的机制,用于标记一个进程或脚本正在运行中。通过创建一个特定的文件作为锁文件,其他实例可以检查这个文件是否存在,从而判断是否有其他实例正在运行。

使用Bash脚本实现单例执行

bash">#!/bin/bash# 定义锁文件路径
LOCK_FILE="/tmp/hyperf_sync_pdf.lock"# 检查锁文件是否存在
if [ -f "$LOCK_FILE" ]; thenecho "Singleton task is already running. Exiting."exit 0
fi# 创建锁文件
touch "$LOCK_FILE"# 执行定时任务
/usr/bin/php /data/test.php  # 删除锁文件
rm "$LOCK_FILE"

脚本工作流程

定义锁文件:脚本开始时定义了一个锁文件/tmp/hyperf_sync_pdf.lock。
检查锁文件:如果锁文件存在,表示任务已经在运行,脚本将打印消息并退出。
创建锁文件:如果锁文件不存在,脚本将创建一个锁文件。
执行任务:在确保任务单例运行后,脚本执行实际的定时任务命令。
删除锁文件:任务执行完毕后,脚本删除锁文件,以便其他实例可以启动。

部署脚本

要使用此脚本,你可以将其保存为.sh文件,并在Linux系统中给予执行权限:

bash">chmod +x /path/to/your_script.sh

然后,你可以使用crontab来安排此脚本定期运行:

bash">crontab -e

添加以下行以每分钟运行脚本:

bash">* * * * * /path/to/your_script.sh

这样,每次运行脚本时,都会首先检查锁文件是否存在。如果存在,则说明已经有一个实例正在运行,脚本会输出提示信息并退出。如果锁文件不存在,则创建锁文件,并执行定时任务。任务完成后,删除锁文件。

使用锁文件的好处

使用锁文件可以避免同时运行多个实例,确保任务在同一时间只能运行一个实例。这对于一些需要互斥运行的任务非常有用,特别是在定时任务或后台任务中。使用锁文件可以防止多个实例同时访问共享资源,避免冲突和竞争条件。


http://www.ppmy.cn/server/46862.html

相关文章

轻松拿捏C语言——【文件操作】

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🎉创作不易,请多多支持🎉 🌈感谢大家的阅读、点赞、收藏和关注💕 🌹如有问题,欢迎指正 目录 &#x1f…

JVM双亲委派模型

在之前的JVM类加载器篇中说过,各个类加载器都有自己加载的范围,比如引导类加载器只加载Java核心库中的class如String,那如果用户自己建一个包名和类名与String相同的类,会不会被引导类加载器加载。可以通过如下代码测试&#xff0…

【文末附gpt升级秘笈】OpenAI的治理结构

OpenAI的治理结构具有其独特性和复杂性,以下是关于其治理结构的详细描述: 组织形态: OpenAI成立于2015年,是一家美国人工智能研究公司,旨在实现安全的通用人工智能(AGI)并让其有益于人类。组织…

Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解

目录 1.前言2. Vivado Webpack下载、安装3.本地文件下载安装 微信公众号获取更多FPGA相关源码: 1.前言 本人自本科大二开始接触FPGA相关知识,现已将近六年,由于一直在上学,也不是一直在搞FPGA,但是也完成过一些项目…

【限免】杂波环境下线性调频脉冲、巴克码、频率步进脉冲雷达MTI、脉冲压缩【附MATLAB代码】

来源:微信公众号:EW Frontier 本代码主要模拟杂波环境(飞机、地杂波、鸟类信号)下,Chirp脉冲、巴克码脉冲、频率步进脉冲雷达信号的脉冲压缩及MTI、​匹配滤波。 MATLAB主代码 % 定义参数 fs 1000; % 采样率 T 1; …

hadoop基础之MapReduce的学习

hadoop基础之MapReduce的学习 MapReduce的执行步骤: 1.Map package com.shujia.mr.worcount;import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapp…

STM32HAL-最简单的长、短、多击按键框架

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、总结 概述 本文章使用最简单的写法实现长、短、多击按键框架,非常适合移植各类型单片机,特别是资源少的芯片上。接下来将在stm32单片机上实现,只需占用1个定时…

Redis面试题深度解析

1、我看你做的项目中,都用到了redis,你在最近的项目中哪些场景使用了redis呢? 2、缓存穿透 布隆过滤器的误判现象 Redisson和Guava都对布隆过滤器进行了实现 3、缓存击穿 互斥锁,就是一个线程来修改,并占据了锁,另外其…