-1

我需要帮助。我有一个脚本“脚本 1”,它将调用“脚本 2”在后台运行,它会定期检查某些内容。但我希望脚本 2 只启动一次,甚至多次调用脚本 1。有没有办法做到这一点?

如果有人建议一些命令来实现这一点,那将更有帮助。

提前致谢

4

1 回答 1

1

当然,你可以把这样的东西放在顶部Script2

if [[ -f /tmp/Script2HasRun ]] ; then
    exit
fi
touch /tmp/Script2HasRun

这将通过使用哨兵文件停止Script2再次运行除非该文件当然被删除,并且它可能会在某个时候因为它位于/tmp.

所以你可能想把它放在其他可以更好地保护它的地方。

如果您不想阻止它再次运行,则需要一些机制来删除哨兵文件。

例如,如果您的意图是一次只运行一个副本:

if [[ -f /tmp/Script2IsRunning ]] ; then
    exit
fi
touch /tmp/Script2IsRunning
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning

请记住,其中存在可能导致两个副本运行的竞争条件。有一些方法可以通过使用内容和存在来缓解这种情况,例如:

if [[ -f /tmp/Script2IsRunning ]] ; then
    exit
fi
echo $$ >/tmp/Script2IsRunning
sleep 1
if [[ "$(cat /tmp/Script2IsRunning 2>/dev/null)" != $$ ]] ; then
    exit
fi
# Do whatever you have to do.
rm -f /tmp/Script2IsRunning

除此之外还有更多级别的保护,但它们变得复杂,我通常发现这对大多数事情来说就足够了。

于 2012-09-25T05:53:06.630 回答