我正在尝试从2个进程(每个进程来自不同的pod)建立锁。在第一次试用中,在第一次试用中,1个进程(假设p1进程获得了锁)成功地获得了锁。但是,当我尝试终止并启动p1进程时,只要p5每5s尝试一次,锁就不会转移到其他进程(p2)。这两个进程都没有获得锁定。
在日志中,我在两个过程日志中都看到错误“已经开始”。当我检查使用ps -ef
的领事过程时,那里什么都没有。
而且,如果我尝试停止这两个进程并同时重新启动两个进程,那么没人会得到锁。
commad used "/tmp/consul lock -timeout 5s t1 " while :; do sleep 10; done"" FYI, i am tring in golang exec package as
cmd := "/tmp/consul lock -timeout 5s t1 \" while :; do sleep 10; done\""
aa := exec.Command("/bin/sh", "-c", cmd)
aa.Run()
答案 0 :(得分:0)
timeout-等待获取锁的最大时间,指定为1s或3h之类的持续时间。默认值为0。
您似乎将超时指定为5s。一旦第二个进程未能在5秒钟内获得锁,它将停止尝试。此外,一旦进程未能获得锁(因为已经有了锁),我相信它将不会再尝试。在我看来,超时用于等待consul
的响应,并且一旦收到响应(是或否),它将继续。
我想不要使用超时,而是要使用try
:
-try-尝试获取到给定超时的锁定。超时是一个正的十进制数字,带有单位后缀,例如“ 500ms”。有效时间单位为“ ns”,“ us”(或“ µs”),“ ms”,“ s”,“ m”,“ h”。