nodeJs刷新NFS挂载

2019-03-18  本文已影响0人  dsjaikdnsajdnua

背景:因为我在市场装的摄像头的时间错误了,而且是离线的,并且摄像头不能手动设置时间,只能指定一个时间同步的服务器来同步时间。所以,我就想尝试在家里的路由器[能连接互联网]搭建一个的NTP服务器,尝试成功再拿去市场那边同步一下时间。但是,好像路由器的存储不够我存放相关的文件来当做NTP服务器,而且,路由器没有USB接口,不能外挂硬盘或者USB。所以,我想能不能挂载一个NFS上去。

前文

思路

方案有2种:NFSSAMBA。我目前只会搭建和挂载NFS,所以我就选择了NFS,而且NFS的性能更加好(然而两者对我没有任何区别)。

方法

下面假定你的nfs服务器地址是:21.22.23.24、nfs共享的目录为/usr/nfs、路由器的公网IP为11.12.13.14


var express = require('express');
var app = express();
var fs = require('fs');
const { exec } = require('child_process');
const filePath = "/etc/exports";//需要修改的文件
const cmd = "systemctl restart nfs";//需要执行的重启nfs命令
const passwd = "mypwd";//非常简单的密码,用于简单的验证
var extractIpFromString = function(str){//因为接收到可能是ipv6地址,所以我们需要提取ipv4地址
    var r = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/;
    var ip = str.match(r);
    return ip[0];
}
app.get('/',function(req,resp){
    var ip = extractIpFromString(req.ip);//req带有请求的ip,我们只需要把它解析出来
    console.log("将ip替换为:",ip);
    var pwd = req.query.pwd;
    if(ip && pwd === passwd){
        fs.readFile(filePath,'utf-8',function(err,data){
            if (err) {
                resp.send('更换配置失败');
                throw err;
            }
            var newData = data.replace( /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/gi, ip);
            
            fs.writeFile(filePath, newData, 'utf-8', function (err) {
                if (err) {
                    resp.send('更换配置失败');
                    throw err;
                }
              });
        })
    }else{
       resp.end('fuckyou! ' );//其实就是密码错误,但是别让别人发现了,所以就不发送密码错误了
    return false;
    }

    exec(cmd, (err, stdout, stderr) => {//执行脚本。为了正常运行,所以我们就捕获可能遇到的异常
        console.log("执行重启nfs");
        try{
            if (err) {
                resp.send('重启失败');
            return;
            }
            resp.send('Fuck me!');//这样返回给客户端就是成功了
        }catch(e){
            console.log(e);
        }
    });
});
app.listen(3000);
console.log("app is running on 3000")
node app
测试结果:这样证明 image.png

同时、我的测试文件的内容就变成了,替换成功,那么我们就可以部署到服务器上面了:

/usr/nfs-share 127.0.0.1(rw,sync,no_root_squash,no_all_squash)

题外话

上一篇下一篇

猜你喜欢

热点阅读