蔺东锋 發表於 2019-8-12 14:29:00

Node.js 定时任务(node-schedule,pm2,shell脚本)

<p>1.背景: 公司的项目经常有小的改动,&nbsp; 因为安全以及运营的一些原因, 晚上0点-7点会停服, 于是有了个项目, 写一个自动脚本, 在停服期间,自动执行 更新代码...</p>
<p>2.环境及依赖:&nbsp;</p>
<p>  centos7, node, child_process, node-schedule, pm2, shell脚本执行</p>
<p>3.以下为简单的实现demo:</p>
<p>  3.1 定时任务逻辑代码  (每分钟第 20s 执行&nbsp;/home/wwwroot/code/node.sh )</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> { exec } = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">child_process</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">const</span> shellOrder = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sh /home/wwwroot/code/node.sh</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">const</span> schedule = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">node-schedule</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
schedule.scheduleJob(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">20 * * * * *</span><span style="color: rgba(128, 0, 0, 1)">'</span>, () =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
exec(shellOrder, (err, stdout, stderr) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(err) {
      console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">err: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, err)
    }
})
})</span></pre>
</div>
<p>&nbsp;</p>
<p>  3.2&nbsp; node.sh&nbsp; &nbsp;</p>
<p>  前面为启动依赖, 后面为执行文件 (注意全部都要绝对路径)</p>
<div class="cnblogs_code">
<pre>/root/.nvm/versions/node/v10.<span style="color: rgba(128, 0, 128, 1)">15.3</span>/bin/node /home/wwwroot/code/nodesh.js</pre>
</div>
<p>&nbsp;</p>
<p>  3.3 node执行脚本 (以 fs 模块写入一个文件为例子)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> fs = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">fs</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">const</span> data = `create by shell script at: ${<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date().getTime()}`

fs.writeFile(`${__dirname}</span>/fs/${<span style="color: rgba(0, 0, 255, 1)">new</span> Date().getTime()}.js`, data, e=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(e) <span style="color: rgba(0, 0, 255, 1)">throw</span><span style="color: rgba(0, 0, 0, 1)"> e
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">the file has been saved!</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
})</span></pre>
</div>
<p>  3.4 pm2 守护进程启动</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span>    npm i pm2 -g          <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 笔者是全局安装pm2</span>
<span style="color: rgba(0, 128, 128, 1)">2</span>    pm2 start node-schedule.js    </pre>
</div>
<p>&nbsp;</p>
<p>4. pm2 启动附图</p>
<p><img src="https://img2018.cnblogs.com/blog/1202035/201908/1202035-20190812142729399-556558111.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/qq4535292/p/11339931.html
頁: [1]
查看完整版本: Node.js 定时任务(node-schedule,pm2,shell脚本)