Rootop 服务器运维与web架构

使用flock防止任务计划启动多次

比如一个脚本,每隔1分钟执行一次,由于处理速度慢,导致执行时间超过1分钟,此时任务计划又启动了一个进程处理数据。
实际要求是必须单进程处理,也就是串行处理。
之前都是通过创建一个临时文件(程序运行完成后删除)判断程序是否在运行中,如果存在则不执行。

现在发现可以通过flock命令实现保证只存在一个进程。

测试脚本:

[root@localhost ~]# cat test.sh
while true
do
	date
	sleep 1
done

执行方法:

[root@localhost ~]# flock -xn /tmp/shell.lock -c "bash /root/test.sh"

-x 是排它锁
-n 是非阻塞,也就是立即返回执行失败,$? = 1,否则就会一直等待另一个执行完。
-c 是要执行的命令
/tmp/shell.lock 是锁的路径

另起一个终端测试

[root@localhost ~]# flock -xn /tmp/shell.lock -c "bash /root/test.sh"
[root@localhost ~]# echo $?
1

可以看到程序立即执行完成,返回值为1,也就是执行失败。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5364.html

作者:Venus

服务器运维与性能优化

评论已关闭。