我在我的服务中使用类似CRON的模块构建(使用node-schedule),这需要进入我的多核设置的每个实例,并且我想知道它们都在运行他们自己的线程,他们都计划同时运行,他们会被调用每个线程或只是一次,因为他们都加载了相同的模块。
如果多次调用它们,那么确保只调用一次所需操作的最佳方法是什么?
答案 0 :(得分:3)
node-schedule
在给定的节点进程内运行,它会调度特定节点进程要求它安排的事情。
如果您正在运行多个节点进程并且每个进程都使用node-schedule,那么这些单独节点进程中的所有节点调度实例都是独立的(它们之间没有合作或协调)。如果每个节点进程要求它自己的节点调度实例在该月的第一个星期三下午3点运行特定任务,那么所有节点进程将在那时开始运行该任务。
如果您只希望执行一次操作,那么您必须在节点实例之间进行协调,以便仅在一个节点进程中调度操作,而不是在所有节点进程中调度,或者仅在其中一个节点进程中调度这些类型的操作您的节点实例,而不是所有节点实例。
答案 1 :(得分:1)
如果您使用群集模式 pm2 ,则可以使用 process.env.NODE_APP_INSTANCE 以检测正在运行的实例。您可以使用以下代码,这样您的cron作业只会被调用一次。
<div class="container">
<div class="header">
<h1>SIMON</h1>
</div>
<div class="simonBoard">
<div class="pad pad-green"></div>
<div class="pad pad-red"></div>
<div class="pad pad-yellow"></div>
<div class="pad pad-blue"></div>
<div class="board-controls">
<div class="title">SIMON</div>
<div class="display">07</div>
<div class="start">START</div>
<div class="strict">STRICT</div>
<div class="switch">ON/OFF</div>
</div>
</div>
</div>