shell实战案例- 实现文件锁(调用外部脚本)

简介: shell实战案例- 实现文件锁(调用外部脚本)

需求: 并发写入时实现劝告锁。

1. 锁判断抽离为一个外部脚本,类似于库文件,在业务中调用这个脚本即可

2. 如何调用外部脚本?

3. 捕获退出信号来释放锁

锁申请和释放的外部脚本

#!/bin/bash
# 抽离文件锁申请方法
# 2022年1月3日11:24:18
function lockfile(){
  trap "echo trapped;rm -rf "${lock_file}";exit 1" EXIT # 无论脚本以何种方式退出,只要不是kill -9,都会触
发这个信号。
  lock_file=$1 #接受外部脚本调用参数
  while [ -f "${lock_file}" ];do # 判断锁是否存在
    echo "locked..."
    sleep 1
  done  
  touch "${lock_file}"  # 如果不存在则创建
}

文件锁实现

lock1.sh

#!/bin/bash
# 文件实现锁功能
# 调用外部脚本判断是否申请锁成功
# 2022年1月3日11:29:49
# -f 从外部加载脚本, source加载脚本,加载之后lockfile在当前shell执行
# || 前面的条件中有一个为false执行后面的内容即不存在并退出。
# 
[ -f "lockfile.sh" ] && source lockfile.sh || { echo "lockfile.sh not exists";exit 1; }
lock_file=/var/lock/mylock
lockfile ${lock_file}
timeout 5 bash -c ' # 5s钟的timeout。  5s不释放锁自动释放。
    while true;do
      echo "lock1.sh : `date +'%T'`" >> /tmp/a.log
      sleep 1
    done'

lock2.sh

#!/bin/bash
# 文件实现锁功能
# 调用外部脚本判断是否申请锁成功
# 2022年1月3日11:29:49
# -f 从外部加载脚本, source加载脚本,加载之后lockfile在当前shell执行
# || 如果不存在则退出。
[ -f "lockfile.sh" ] && source lockfile.sh || { echo "lockfile.sh not exists";exit 1; }
lock_file=/var/lock/mylock
lockfile ${lock_file}
timeout 5 bash -c '
    while true;do
      echo "lock2.sh : `date +'%T'`" >> /tmp/a.log
      sleep 1
    done'

结果

目录
相关文章
|
8天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
19 1
|
8天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
14 1
|
8天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
8天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
8天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
30 5
|
8天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
8天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
8天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
17 3
|
8天前
|
弹性计算 运维 监控
|
8天前
|
存储 弹性计算 运维
自动化收集员工信息的Shell脚本
【4月更文挑战第30天】
14 0