如果无法锁定文件,则使用错误消息进行群集

时间:2012-11-06 11:35:38

标签: linux bash

我的bash代码看起来像:

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

但是目前它没有显示任何错误消息,如果它无法锁定文件。 有没有办法显示错误信息?

3 个答案:

答案 0 :(得分:2)

使用“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

答案 1 :(得分:1)

联机帮助页中的示例说:

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

即如果鸡群失败就会退出 - 为什么不用它呢? 如果您想显示错误,可以试试这个:

(
         # 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

答案 2 :(得分:0)

您应该检查flock -n

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