我很难理解为什么以下情况会使文件系统上出现“lock”文件。
档案script
:
#!/bin/sh
set -e
run-parts sub &> /dev/null
档案sub/subscript
:
#!/bin/sh
set -e
# Exit if another job is running.
[ -e ./lock ] && exit 0
trap "rm -f ./lock; exit" 0 1 2 5 15
touch ./lock
echo "test"
现在在run-parts --report .
所在的文件夹中运行script
时,为什么它会以文件lock
退出?
我认为它应该做什么:
1)在当前文件夹中查找可运行的脚本(找到script
)
2)它将运行script
并在其中运行另一个运行部件实例,该实例找到脚本sub/subscript
并运行此脚本
3)当信号0,1,2,5或15出现时,文件sub/subscript
将创建文件lock
,应再次将其删除。
到目前为止我发现了什么:
1)删除&> /dev/null
将删除锁定文件
2)删除--report
也会删除锁定文件
但是在我的情况下,这两个分辨率不是一个选项,因为我不是代码的维护者。
根据我的理解,所提到的信号都不会被触发。这是为什么?
操作系统:Debian Jessie答案 0 :(得分:0)
因此...
#!/bin/sh
set -e
# Exit if another job is running.
[ -e ./lock ] && exit 0
首先,将#!/bin/sh
更改为#!/bin/bash
,因为这是一个重击问题。您可能正在运行将/ bin / sh链接到/ bin / bash的Linux风格,但这不确定。接下来,如果您运行此命令并且锁定文件存在,它将退出并保留文件。
trap "rm -f ./lock; exit" 0 1 2 5 15
touch ./lock
echo "test"
如果没有锁,则上面运行了。您触摸文件,回显测试,然后将其删除。如果你看到一个“测试”还没回来,你就没有提到过。它似乎按预期工作。