nodejs中怎么執行系統命令或者linux命令來完成一些功能呢?
假設有這樣一個需求,在頁面中,點擊按鈕重啟服務,升級系統之類的,服務是部署在linux下的C++項目。需要發送請求到web后台,web后台中來執行Linux命令實現重啟或者升級服務的功能。剛好在工作中遇到了這樣的問題,做一個簡要記錄。
nodejs可以利用子進程來調用系統命令或者文件,提供了與系統交互的重要接口。在上面的文檔中有較為詳細的說明。
這里主要用到的是
1 child_process.exec(command[, options][, callback])
首先需要安裝一下
npm install child_process --save
先是前端的頁面和邏輯
vue項目,使用了element-ui
<el-button class="btn" size="mini" type="primary"@click="RestartServer">重啟服務</el-button>
js部分的methods中加一個對應的方法RestartServer(),點擊按鈕發送請求
RestartVIServer(){
var _this=this;
_this.loading=true;
this.$axios.get("action/OwnRestartServer").then(res=>{
let data=res.data;
_this.$message({
type: 'success',
message: "操作成功!系統正在重啟,請稍等1-2分鍾后刷新頁面",
duration:5000,
showClose: true
});
}).catch(err=>{
_this.$message({
type: 'error',
message: err,
showClose: true
});
})
},
nodeJS ----web后台
話不多說,直接上代碼
const Koa=require("koa");
const router=require("koa-router")();
const exec=require('child_process').exec;
let reStartPro="sudo monit restart OwnServer";//這是一條重啟服務的linux命令,也可以是執行其他功能的命令~
//對exec進行一個簡單的封裝,返回的是一個Promise對象,便於處理。
function doShellCmd(cmd){
let str=cmd;
let result={};
return new Promise(function(resolve,reject){
exec(str,function(err,stdout,stderr){
if(err){
console.log('err');
result.errCode=500;
result.data="操作失敗!請重試";
reject(result);
}else{
console.log('stdout ',stdout);//標准輸出
result.errCode=200;
result.data="操作成功!";
resolve(result);
}
})
})
}
//加URL
router.get('action/OwnRestartServer', async (ctx, next) => {
let result=await doShellCmd(reStartPro);//調用exec
console.log("[restartServer] ",result);
ctx.response.status=result.errCode;
ctx.response.body=result.data;
});
app.use(router.routes());
app.listen(3000);
console.log('app started at port 3000...');
這樣在點擊重啟服務按鈕后,會發送127.0.0.1:3000/action/OwnRestartServer請求到web后台,web后台執行Linux命令完成需求功能。
原創文章,轉載請注明出處~~~
