我需要帮助。我有一个脚本“脚本 1”,它将调用“脚本 2”在后台运行,它会定期检查某些内容。但我希望脚本 2 只启动一次,甚至多次调用脚本 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
除此之外还有更多级别的保护,但它们变得复杂,我通常发现这对大多数事情来说就足够了。