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 啟動附圖