Linux 文件锁

庆云2年前技术文章556


1、背景

Linux 系统定时任务正在执行时,可能会遇到上个周期的任务还没有执行完,这样便会造成相同的任务同一时间有过个任务进程在执行。如果任务有对互斥资源操作时,有可能产生死锁。

2、用法参考

flock 命令,是 linux 的文件锁命令。可以通过一个锁文件,来控制多个任务进程的互斥性。用法如下:

$ flock -h
Usage:
 flock [options] <file|directory> <command> [command args]
 flock [options] <file|directory> -c <command>
 flock [options] <file descriptor number>

Options:
 -s  --shared                      获得共享锁
 -x  --exclusive                   获得排他锁(默认)
 -u  --unlock                      移除锁
 -n  --nonblock                    失败而不等待
 -w  --timeout <secs>              等待一段时间
 -E  --conflict-exit-code <number> 冲突或超时后的退出代码
 -o  --close                       在运行命令前关闭文件描述符
 -c  --command <command>           通过 shell 运行一条命令

 -h, --help                        显示此帮助并退出
 -V, --version                     输出版本信息并退出


3、操作步骤

3.1 任务互斥

*/5 * * * * flock -xn /tmp/receive-ossutil-1.lock -c  /root/rabbitmq-comsumer.sh
*/5 * * * * flock -xn /tmp/receive-ossutil-2.lock -c  /root/rabbitmq-comsumer.sh
*/5 * * * * flock -xn /tmp/receive-ossutil-3.lock -c  /root/rabbitmq-comsumer.sh
  • x 表示文件锁为互斥文件锁,这个参数可以省略,默认即为互斥文件锁。

  • n 表示当有任务执行时,直接退出,符合我们的逾期。

3.2 排队等待

*/10 * * * * flock -w 20 /tmp/my.lock -c /root/rabbitmq-comsumer.sh
  • 排队执行,每个任务等待 20s,超时则退出。

3.3 共享锁

# 共享锁
*/10 * * * * flock -s /tmp/my.lock -c /root/rabbitmq-comsumer.sh

3.4 忽略锁

*/10 * * * * flock -u /tmp/my.lock -c /root/rabbitmq-comsumer.sh
  • 忽略锁,直接执行。

3.5 自定义退出码

*/10 * * * * flock -E 1 -w 20 /tmp/my.lock -c /root/rabbitmq-comsumer.sh

4、注意事项

在自定义退出码时,尽量使用 1 位的数字,当使用多位数字时,会出现不是自定义的其他返回码。

5、结果检查

创建相关定时计划任务后,观察是否符合预期。

相关文章

Flink 运行架构简介

Flink 运行架构简介

一、Flink简介Apache Flink 是一个开源的分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。它具备强一致性的计算能力、大规模的扩展性,整体性能非常卓越,同时支持SQL、Ja...

Atlas集成HBase

Atlas集成HBase

1 集成原理 Atlas HBase hook与HBase master注册为协处理器。在检测到对HBase名称空间/表/列族的更改时, Atlas Hook过Kafka通知更新Atlas中的元数据。...

Logstash迁移ES集群

一、背景介绍   logstash 支持从一个 ES 集群中读取数据然后写入到另一个 ES 集群,因此可以使用 logstash 进行数据迁移,使用 logstash 进行迁移前,需要注意以下几点:需...

开启kerberos配置HiveServer2负载均衡

开启kerberos配置HiveServer2负载均衡

1.HAProxy配置HiveServer2负载均衡1.编辑/etc/haproxy/haproxy.cfg文件,在文件末尾增加如下配置listen stats     bind 0.0.0.0:1...

开源大数据集群部署(七)Freeipa卸载

开源大数据集群部署(七)Freeipa卸载

1、命令卸载如果命令还卸载不赶紧,就在FreeIPA界面删除ipa-server-install -U --uninstall #服务端卸ipa-client-install -U --uninsta...

使用helm在k8s集群部署rancher

使用helm在k8s集群部署rancher由于我们的k8s版本是1.22,所以我们直接安装latest版本的rancher。不同版本的rancher helm仓库可以看下面链接https://docs...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。