
在开发过程中,经常会使用shell脚本去完成定时备份的任务,普遍的做法是通过系统的定时任务定时执行备份脚本
设想这样一种场景,本次备份时间到了,自动执行备份脚本,如果备份比较耗时的话,会一直持续到下一次备份时间到了还未结束,下次备份又会自动调用备份脚本,相当于同一时间有两个进程在执行备份脚本,这可能会导致备份数据错乱或其他不可预知的问题
更进一步,假如执行备份脚本消耗的时间远大于设置的备份间隔的话,系统会出现多个同时在执行脚本的Bash实例,会占用大量的系统资源,进而影响正常业务程序的运行
那如何解决上述shell脚本重复执行的问题呢,本文将要介绍的 flock命令可以解决这个问题
简介
flock是文件锁命令,它可以保证Linux系统上进程之间安全的访问临界资源,在shell脚本中,可以用来控制逻辑的互斥性
实例1
现有脚本 a.sh, 内容如下
#!/bin/bash
echo "[`date +'%Y-%m-%d %H:%M:%S'`] begin pid:$$..."
sleep 10
echo "[`date +'%Y-%m-%d %H:%M:%S'`] end pid:$$..."
在终端(记为终端1)中执行 flock -xn ./f.lock -c ./a.sh命令,结果如下
[tt@ecs-cent
使用 flock 解决 Linux shell 脚本重复执行问题

本文介绍了如何使用 Linux 的 flock 命令防止shell脚本在同一时间被多次执行,避免资源冲突和数据错乱。通过实例展示了 flock 的用法,包括阻塞与非阻塞模式,以及一种简化脚本锁的实现方式。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



