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

Does flock understand && command for multiple bash commands?

我正在使用 bash 并涌向 centos。

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

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

并在它前面添加一个 flock 以防止出现多个实例,如下所示:

flock -n ~/.my.lock cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1

问题 这只会聚集 cd /to/my/dir 然后执行 python3.6 (通常没有聚集)或者它会聚集完整的 bash 命令行(所以两者都有)并且只有在 python3.6 runcommand.py也完了?

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

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

flock -n ~/.my.lock cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1
  • 第 1 步:运行flock -n ~/.my.lock cd /to/my/dir 部分
  • 第2步:如果第1步中的命令以非零退出,则跳过第3步
  • 第 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

在 Unix 和 Linux 站点上查看此 post:

我必须在 crontab 中执行此操作。这是我的方式 -

*/30 * * * * cd /home/myfolder/ /usr/bin/flock -w 0 /home/myfolder/my-file.lock && python my_script.py > /dev/null 2>&1