比如一个脚本,每隔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