Node.js 定时任务(node-schedule,pm2,shell脚本)
<p>1.背景: 公司的项目经常有小的改动, 因为安全以及运营的一些原因, 晚上0点-7点会停服, 于是有了个项目, 写一个自动脚本, 在停服期间,自动执行 更新代码...</p><p>2.环境及依赖: </p>
<p> centos7, node, child_process, node-schedule, pm2, shell脚本执行</p>
<p>3.以下为简单的实现demo:</p>
<p> 3.1 定时任务逻辑代码 (每分钟第 20s 执行 /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>, () =><span style="color: rgba(0, 0, 0, 1)"> {
exec(shellOrder, (err, stdout, stderr) </span>=><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> </p>
<p> 3.2 node.sh </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> </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=><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> </p>
<p>4. pm2 启动附图</p>
<p><img src="https://img2018.cnblogs.com/blog/1202035/201908/1202035-20190812142729399-556558111.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/qq4535292/p/11339931.html
頁:
[1]