您的位置:首页 > 运维架构 > Shell

linux shell 确保脚本只有一个运行实例

2017-12-26 12:10 971 查看
在linux 里面可能存在有脚本在一个终端还没有执行完成的时候,另外一个终端又开始执行此脚本。或者某些放在crontab 中的例行任务在本次没有执行完成时就开始了下一次执行。 这些都造成了一个任务在linux 里面存在多个运行实例。

同时存在多个运行实例对数据进行修改时候会造成很多令人困惑的问题。我们可以在脚本执行开始前创建一个临时文件,如果此文件存在,就表示系统中存在一个运行实例,每个实例在退出之前把临时文件删除,以后新的实例就可以运行。可以参照以下脚本

# 检查锁文件是否存在,如果存在表示系统中有其他实例在运行,则直接退出。
# 需要注意的是,锁文件需要避免重名,可以参照c++ 头文件保护宏的命名方式
[ -f /tmp/lock.file ] && exit

# 开始执行任务前,创建锁文件,并把当前pid 写入锁文件
echo $$ > /tmp/lock.file
sleep 1
# 判断锁文件中的pid 和当前pid 是否相同 ,如果不同则退出
[ "x$(cat /tmp/lock.file)" == "x"$$ ] || exit
# 执行任务,这里添加你的脚本逻辑
sleep 60
# 删除锁文件
rm -f /tmp/lock.file
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息