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
我正在使用 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