Linux Shell定时任务重复执行的本质是多个实例并发导致资源争用或逻辑错误,应根据任务特性选择防并发、保幂等或控节奏策略:用flock实现脚本级互斥、进程名检测轻量防重、设计幂等任务、调整调度节奏与超时机制。

Linux Shell定时任务重复执行,本质是多个相同任务实例同时运行导致资源争用或逻辑错误。避免冲突的关键不是单纯加锁,而是根据任务特性选择合适策略:防止并发、确保幂等、或控制执行节奏。
使用 flock 实现脚本级互斥执行
flock 是最常用且轻量的文件锁方案,适合单机环境下的简单防重。它通过在脚本开头对某个固定文件加锁,确保同一时刻仅一个实例运行。
- 在 crontab 中调用脚本时,直接包裹 flock 命令:
* * * * * flock -n /tmp/myjob.lock -c '/path/to/your/script.sh' || echo "Job skipped: already running" - -n 表示非阻塞,若锁已被占用则立即退出,避免任务堆积
- 锁文件路径建议用绝对路径,且确保所有实例指向同一文件(如 /tmp/ 下需注意 tmpfs 清理风险)
- 不推荐在脚本内部调用 flock,容易因异常退出导致锁残留;应由 cron 直接控制
基于进程名检测的轻量级防重
适用于无法依赖外部文件系统(如容器只读层)、或需快速判断是否已有活跃进程的场景。
标签: linux
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~