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'

结果

目录
相关文章
|
22天前
|
Shell
shell脚本实战示例
shell脚本实战示例
26 6
|
25天前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
35 0
|
28天前
|
Shell Linux Perl
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
将 Linux 系统中 UID 大于等于 1000 的普通用户都删除shell脚本
25 1
|
28天前
|
机器人 关系型数据库 MySQL
shell脚本实现文件自动清理并推送钉钉机器人告警
shell脚本实现文件自动清理并推送钉钉机器人告警
23 0
|
4天前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
6天前
|
运维 Java 应用服务中间件
Tomcat安装shell脚本
Tomcat安装shell脚本
17 7
|
6天前
|
运维 应用服务中间件 Shell
Nginx安装与虚拟主机配置shell脚本
Nginx安装与虚拟主机配置shell脚本
12 0
|
19天前
|
Shell
shell脚本for循环复杂用法
shell脚本for循环复杂用法
28 5
|
19天前
|
Shell
Shell脚本中的`case`语句
Shell脚本中的`case`语句
20 5
|
19天前
|
Shell
在Shell脚本中,使用`if`语句进行复杂的条件判断
在Shell脚本中,使用`if`语句进行复杂的条件判断
16 2

相关产品

  • 云迁移中心