1.背景: 公司的项目经常有小的改动, 因为安全以及运营的一些原因, 晚上0点-7点会停服, 于是有了个项目, 写一个自动脚本, 在停服期间,自动执行 更新代码...
2.环境及依赖:
centos7, node, child_process, node-schedule, pm2, shell脚本执行
3.以下为简单的实现demo:
3.1 定时任务逻辑代码 (每分钟第 20s 执行 /home/wwwroot/code/node.sh )
const { exec } = require('child_process'); const shellOrder = 'sh /home/wwwroot/code/node.sh'; const schedule = require('node-schedule') schedule.scheduleJob('20 * * * * *', () => { exec(shellOrder, (err, stdout, stderr) => { if(err) { console.log('err: ', err) } }) })
3.2 node.sh
前面为启动依赖, 后面为执行文件 (注意全部都要绝对路径)
/root/.nvm/versions/node/v10.15.3/bin/node /home/wwwroot/code/nodesh.js
3.3 node执行脚本 (以 fs 模块写入一个文件为例子)
const fs = require('fs') const data = `create by shell script at: ${new Date().getTime()}` fs.writeFile(`${__dirname}/fs/${new Date().getTime()}.js`, data, e=> { if(e) throw e console.log('the file has been saved!') })
3.4 pm2 守护进程启动
1 npm i pm2 -g // 笔者是全局安装pm2 2 pm2 start node-schedule.js
4. pm2 启动附图