经过一些重新设置后,我遇到了这些代码段,这些代码段用于脚本的简单锁定,而我只想运行一次。
if ! mkdir /tmp/myscript.lock 2>/dev/null; then
echo "Myscript is already running." >&2
exit 1
fi
function finish {
rm -r /tmp/myscript.lock
}
trap finish EXIT
因此,第一部分尝试锁定目录,如果目录已经存在,则退出。
其中有第二段代码,因此,如果脚本崩溃或退出,则清理目录,以便脚本可以重新启动。
我的问题是,如果脚本已经在运行并且我启动了第二个副本,由于锁定文件,它将退出,但是在此过程中会删除锁定目录吗?
有没有一种方法可以确保如果脚本由于存在锁定文件而终止,则不会删除该脚本,但是如果脚本在退出过程中顺利退出和/或狂奔,则会清除目录?
我不想使用任何其他工具,我只是很好奇如何实现这一目标,而且我似乎找不到使用这两种工具的任何示例。
答案 0 :(得分:1)
为什么需要使用trap
进行清理。只需确保在出口处进行清理,如下所示:
tmpFile='/tmp/myscript.lock'
if ! mkdir "$tmpFile" 2>/dev/null; then
echo "Myscript is already running." >&2
exit 1
fi
echo "script is running..."
# script code starts here, sleep is just an example
sleep 20
# script complete, perform cleanup
rm -rf "$tmpFile"
echo "script completed..."
现在,当此脚本运行时,此脚本的所有后续调用将在第一个if
块中以status = 1退出,而不会删除您的锁定文件。