flock 是否理解多个 bash 命令的 && 命令?

snh*_*_nl 6 bash flock

我正在使用 bash 并聚集在 centos 上。

通常我会跑 cd /to/my/dir && python3.6 runcommand.py

但是然后我们将它添加到 cron 并且不想要输出所以添加 > /dev/null 2>&1

并在它之前添加一个羊群以防止多个实例,如下所示:

flock -n ~/.my.lock cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

问题 仅此群集cd /to/my/dir然后执行python3.6(通常没有群集)还是群集完整的 bash 命令行(因此两者)并且仅在python3.6 runcommand.py完成时才解锁?

从我发现的人和例子中不清楚。

cod*_*ter 1

Shell 以这种方式解释您的命令:

flock -n ~/.my.lock cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
  • 第 1 步:运行flock -n ~/.my.lock cd /to/my/dir部分
  • 步骤 2:如果步骤 1 中的命令以非零值退出,则跳过步骤 3
  • 第三步:运行python3.6 runcommand.py > /dev/null 2>&1部分

所以,flock与它无关&&,也与它无关。

你可以这样做:

touch ./.my.lock # no need for this step if the file is already there and there is a potential that some other process could lock it
(
  flock -e 10
  cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1
) 10< ./.my.lock
Run Code Online (Sandbox Code Playgroud)

请参阅 Unix 和 Linux 站点上的这篇文章:

  • `(cd /to/my/dir &amp;&amp; exec freeze -n ~/.my.lock python 3.6 runco​​mmand.py &gt;/dev/null 2&gt;&amp;1)` 也足够了。 (2认同)