linux 如何显示错误消息时,使用flock如果无法获得锁定文件

xytpbqjk  于 2023-03-07  发布在  Linux
关注(0)|答案(4)|浏览(200)

我的bash代码如下所示:

set -e
  (
     flock -n 9
     main $@
   ) 9>/var/lock/mylockfile

但目前它不显示任何错误消息,如果它是不能得到锁定的文件。有没有办法显示错误消息?

kpbwa7wx

kpbwa7wx1#

通过“set -e”,您可以使用ERR信号。正如bash的手册页中所述(带选项“-e”的“set”命令的描述):

"A trap on ERR, if set, is executed before the shell exits."

因此,您可以尝试以下操作:

set -e
(
  trap 'echo flock failed.' ERR
  flock -n 9
  trap - ERR   # reset ERR trap
  main $@
) 9>/var/lock/mylockfile
3zwjbxry

3zwjbxry2#

手册页中的示例如下:

(
     flock -n 9 || exit 1
     # ... commands executed under lock ...
   ) 9>/var/lock/mylockfile

例如,如果flock失败,它就会退出--为什么不直接使用它呢?如果你想显示一个错误,你可以试试这个:

(
         # paranoia: flock may fail with an exit code other than 1,
         # eg if it can't be found in $PATH
         if flock -n 9 ; then
           do_stuff
         else
           show_error
         fi
) 9>$lockfile
jucafojl

jucafojl3#

您应该检查flock -n的返回代码

set -e
  (
     flock -n 9
     if [ "$?" -eq 1 ] ; then 
        echo "could not lock"
        exit 1
     fi
     main $@
   ) 9>/var/lock/mylockfile
0lvr5msh

0lvr5msh4#

我的解决方案:

lock="/tmp/name_of_lockfile.lck"
echo "Lockfile $lock"
exec 200>$lock
/usr/bin/flock -n --verbose 200 || exit 1

因此,当运行成功时

Lockfile /tmp/name_of_lockfile.lck
flock: getting lock took 0.000006 seconds

而且不成功

Lockfile /tmp/name_of_lockfile.lck
flock: failed to get lock

相关问题