lam*_*988 3 shell shell-script trap
我编写了一个 shell 脚本run_script.sh,其中包括一个创建空文件的步骤run_script.lck。每次 cronjob 调用 shell 脚本时,它都会检查run_script.lck. 如果锁存在,则表明它run_script.sh已经在运行并且尚未完成。该run_script.lck文件将在程序结束时删除。
问题是在 shell 脚本崩溃时和退出之前删除锁定文件。
我写了这样一行:
trap "rm -f run_script.lck" EXIT
Run Code Online (Sandbox Code Playgroud)
但它会在不希望的情况下删除锁定文件,如下所示:
我run_script.sh在 shell A 中执行,它正在运行,锁定文件已创建。然后我在shell B中再次执行它,它说脚本已经在运行,脚本将被中止。然而,因为陷阱收到了一个 EXIT 信号,包括来自 shell B 的信号,它正在退出一个中止的脚本,然后它会删除锁定文件。并且 shell A 中的脚本仍在运行,但锁已被删除,任何人都可以run_script.sh在已经有一个脚本运行时再次调用另一个脚本。
知道如何解决这个问题吗?