如何安全地更新服务器脚本,该脚本可以随时通过 cron 启动

如何安全地更新服务器脚本,该脚本可以随时通过 cron 启动

我有一个服务器脚本,它每 10 分钟由 cron 启动一次,并对数据库执行一些操作,因此它可以运行几分钟。因此,如您所见,更新过程和脚本工作重叠的可能性相当高,而我无法承受这种情况,因为它可能导致数据库损坏等。

我的第一个想法是制作某种锁定机制,但我想象的一切都变得非常复杂:例如,我正在考虑使用某种锁来运行脚本的 PID 文件,但这会导致很多魔鬼细节,比如正确的锁定,避免脚本因错误退出而将 .pid 文件留在磁盘上的情况(防止后续运行)等等。

那么我的问题是:是否有一种简单的方法可以做到这一点,或者是否有一些库/工具可以解决此类问题?

谢谢你!

答案1

标准解决方案是将新版本的脚本写入与目标位于同一目录中的临时名称的新文件。脚本编写完成后,将在旧版本之上重命名。任何正在运行的实例仍将使用旧版本。

如果调用该脚本,/usr/local/bin/script.sh临时名称可以是/usr/local/bin/.script.sh.XXXXXX将 XXXXXX 替换为随机生成的字符串。

答案2

完成后只需让您当前的 cron 脚本为您执行即可。

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

相关内容