Linux 锁定文件创建在bash脚本中不起作用

Linux 锁定文件创建在bash脚本中不起作用,linux,bash,lockfile,Linux,Bash,Lockfile,这可能是一个非常简单的问题,但我不明白它为什么会这样。当我调用 lockfile-create --use-pid --retry 0 /tmp/my_lock_file 它返回0,下一次运行时返回一些其他代码(4),因为它已经创建了锁文件。但是当我将相同的代码包装到bash脚本文件中时,它总是返回0作为退出代码。有人知道为什么它不起作用吗 更新:完成bash文件内容 #! /bin/bash LOCK=alert lockfile-create --use-pid --retry 0 $

这可能是一个非常简单的问题,但我不明白它为什么会这样。当我调用

lockfile-create --use-pid --retry 0 /tmp/my_lock_file
它返回0,下一次运行时返回一些其他代码(4),因为它已经创建了锁文件。但是当我将相同的代码包装到bash脚本文件中时,它总是返回0作为退出代码。有人知道为什么它不起作用吗

更新:完成bash文件内容

#! /bin/bash

LOCK=alert

lockfile-create --use-pid --retry 0 $LOCK
LOCK_CREATED=$?
echo "Lock file creation status $LOCK_CREATED"
我就是这样运行的。/alert.sh

但当我将相同的代码包装到bash脚本文件中时,它总是 返回0作为退出代码

这是因为当您再次执行脚本时,执行脚本的进程的PID已更改。因此,
--use pid
标志会导致
lockfile create
认为需要覆盖锁文件

根据您的用例,您可能希望去掉
--user pid
标志。但是,在这种情况下,您需要确保自己清理锁文件

引用
手动锁文件创建

   -p, --use-pid
       Write the parent process id (PPID) to the lockfile whenever a lock‐
       file  is created, and use that pid when checking a lock's validity.
       See the lockfile_create(3)  manpage  for  more  information.   This
       option  applies  to lockfile-create and lockfile-check.  NOTE: this
       option will not work correctly between machines sharing a  filesys‐
       tem.

您可以通过尝试在同一脚本中再次创建日志文件来验证所观察到的行为:

#! /bin/bash
LOCK=alert

lockfile-create --use-pid --retry 0 $LOCK
LOCK_CREATED=$?
echo "Lock file creation status $LOCK_CREATED"
lockfile-create --use-pid --retry 0 $LOCK
LOCK_CREATED=$?
echo "Lock file creation status $LOCK_CREATED"

除了这一行之外,脚本中还有其他内容吗?那么它应该按预期工作。脚本的退出状态是它执行的最后一个命令的退出状态。#/bin/bash LOCK=警报锁文件创建--使用pid--重试0$LOCK\u CREATED=$?echo“锁定文件创建状态$Lock_CREATED”是文件中的内容。抱歉,格式混乱请更新您的问题,阅读注释中的代码很困难。当前目录中是否存在名为
alert
的文件?请注意,
alert
alert.sh
将是不同的文件,尽管这似乎不是问题的根源。是的,很好的解释。它解决了我的问题,我不想出于任何原因使用PID。谢谢devnull