如何安全地更新一个服务器脚本,可以随时由cron启动

我有一个服务器脚本,每10分钟由cron启动,并执行一些数据库操作,因此可以运行几分钟。 所以,正如你所看到的,重叠更新过程和脚本工作的可能性是相当高的,而我承受不起,因为它可能导致数据库损坏等。

我的第一个想法是制作某种locking机制,但是我想象的任何东西都变得相当模糊:例如,我想要一个用于运行具有某种locking脚本的PID文件,但却导致了许多恶魔细节,比如正确locking,避免脚本退出时由于错误而离开.pid文件(防止下次运行)等等。

我的问题是:有一个简单的方法来做到这一点或一些图书馆/工具,解决这种问题?

谢谢!

只要有你现在的cron脚本就可以为你做。

echo "cat /tmp/new.cron.sh > /usr/local/bin/current.cron.sh" >> /usr/local/bin/current.cron.sh 

标准的解决scheme是将新版本的脚本写入一个临时名称与目标位于同一目录的新文件。 一旦脚本被写入,它将被重命名为旧版本的顶部。 任何正在运行的实例仍将使用旧版本。

如果脚本名为/usr/local/bin/script.sh ,临时名称可能是/usr/local/bin/.script.sh.XXXXXX ,其中XXXXXX被replace为随机生成的string。