我在galaxy服务器上的meteor app中有两个容器。我有一些后台工作,我想只在一个容器上执行,以避免重复。
实现这一目标的最简单方法是什么?我可以在运行时检索一些procId等吗?
答案 0 :(得分:1)
如果两台服务器都有自己的设置文件,您可以使用一个设置来指定其中一台服务器作为执行后台作业的服务器。
有一个名为node-cron的软件包,可用于设置常规作业https://www.npmjs.com/package/node-cron
使用Meteor.startup
方法查看设置文件,如果是指定服务器,则可以为自己安排作业。
另一种技术是计算每个服务器的ID,并使数据库条目包含指定服务器的ID。
在进一步检查时,https://github.com/percolatestudio/meteor-synced-cron支持多个服务器,它们可以满足您的需求:)
答案 1 :(得分:0)
我正在考虑更多……一种解决方案(我从meteor-migrations那里借来的)是制作一个简单的带有startupCodeHasRun
标志的数据库集合/条目。然后,在Meteor.startup()
块中,您可以检查是否已设置标志,如果未设置,则设置标志并运行代码。这将导致代码仅在共享相同数据库的一个容器上运行一次。
棘手的是您必须在重新部署之前手动重置此标志,否则代码将永远不会在重新部署时再次运行。
不是理想的解决方案,但可以工作。这与上述数据库迁移软件包在多容器环境中的工作方式相同。而且由于这是一次数据库迁移,因此您不必担心重新部署。