我正在使用 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完成时才解锁?
从我发现的人和例子中不清楚。
Shell 以这种方式解释您的命令:
flock -n ~/.my.lock cd /to/my/dir && python3.6 runcommand.py > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
flock -n ~/.my.lock cd /to/my/dir部分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 站点上的这篇文章: