shell flock实现单例模式执行任务

场景

我们需要定时执行一个任务,并且保证每次执行时都需要上一次已经执行完了,即保证同一时间只有一个在运行

示例

假设需要执行的脚本是:ping_and_mtr.sh

创建一个新的脚本来运行你的逻辑脚本:touch /root/run_ping_and_mtr.sh

run_ping_and_mtr.sh:

#!/bin/bash# 为 ping_and_mtr.sh 创建一个锁文件lock_file="/root/ping_and_mtr.lock"while truedo # 使用 flock 确保在同一时间只有一个脚本实例在运行 flock -n $lock_file -c "/root/ping_and_mtr.sh" # 每 10 秒运行一次脚本 sleep 10done

设置后台一直运行:

赋予执行权限:chmod +x /root/run_ping_and_mtr.sh后台一直运行:nohup /root/run_ping_and_mtr.sh &