CBrother脚本语言10分钟写一个拯救“小霸王服务器”的程序

到了一家新公司,接手了一坨c++服务器代码,到处内存泄漏,这服务器没有数据库,挂了后重启一下就好了,公司就这么凑活着用了几年了,定时重启吧,也不是天天挂,不定时重启吧,说不准哪天就挂了。。。。。。

小公司,从写代码到维护就我一个人,每到下班后或者周末,电话一响,我就知道挂了,得找电脑重启一下,要是出去玩了还得找网吧,装个远程软件吧,公司说服务器之前被远程软件黑过,不准装,烦。

想着弄个什么程序在手机上点一下就给重启了就好了,咱这种写C++后台十几年的人,手机APP是不会开了,那就弄个网页服吧,选了半天,python的语法把我快看晕了。PHP研究一早上环境都没搭起来。找其他的,找到了一门CBrother脚本,语法跟C++共通之处,写http接口极其简单,跟作者聊了一下,10分钟就写出了我要的东西,现在我给公司其他同事一人一个账号,谁都可以重启服务了。为了感谢CBrother作者,这里写篇文章帮他宣传一下。

主函数:

//入口函数,和c++一样,启动调用main函数,这点我喜欢
function main(params)
{
var httpServer = new HttpServer(); //创建一个http服务
httpServer.addAction("hello.cb",new HelloAction()); //注册hello.cb接口响应类HelloAction
httpServer.addAction("120120.cb",new Action120()); //注册重启接口为120120.cb
httpServer.setNormalAction("hello.cb"); //设置默认页调用 hello.cb
httpServer.startServer(11120); //设置服务端口为11120 //主线程不退出,除了语法简化外,套路和c++简直一摸一样
while (1)
{
Sleep(1000);
}
}

hello.cb:

class HelloAction
{
//接口的执行函数
function DoAction(request,respone)
{
//写一个表单,这都是大学时候学的东西,十几年了,幸亏还记了一点点,哈哈
respone.write("<html><head><title>抢救服务器</title><meta http-equiv=\"content-type\" content=\"txt/html; charset=utf-8\" /></head><body>");
respone.write("<br><FORM method=\"post\" action=\"120120.cb\">");
respone.write("<INPUT type=\"text\" name=\"username\"><br>");
respone.write("<input type=\"password\" name=\"userpass\"><br>");
respone.write("<input type=\"submit\" value=\"抢救\"></FORM></body><html>");
respone.flush();
}
}

120120.cb重启服务器的操作:

var g_userMap = {"admin":"123.123","huangyi":"256.256","boss":".boss1boss"};//定义用户密码
var g_exepath = "D:\\work\\FVServer\\FVServer.exe"; //进程路径
var g_exeName = "FVServer.exe"; //进程名称 class Action120
{
function DoAction(request,respone)
{
respone.write("<html><head><title>抢救服务器</title><meta http-equiv=\"content-type\" content=\"txt/html; charset=utf-8\" /></head><body>");
var fromdata = request.getFormData(); //获取表单数据
if (fromdata == null)
{
respone.write("我不认识你</body><html>");
respone.flush();
return;
} var userName = strlower(fromdata.getText("username")); //获取用户名,转小写
var pwd = fromdata.getText("userpass");
var pwdlocal = g_userMap[userName]; //判断用户是否存在
if (pwdlocal == null)
{
respone.write("我不认识你</body><html>");
respone.flush();
return;
} if (pwdlocal != pwd) //判断密码是否正确
{
respone.write("密码错误</body><html>");
respone.flush();
return;
} var oldid = 0;
respone.write("抢救中...");
var pidarr = GetProcessByName(g_exeName); //获取进程ID列表,应该只有一个
if (pidarr != null)
{
for (var i = 0; i < pidarr.size() ; i++)
{
print "查杀进程ID:" + pidarr[i];
KillProcessByID(pidarr[i]); //查杀进程
}
Sleep(2000);
} respone.write("<br>抢救中...");
var pid = CreateProcess(g_exepath); //重新启动一个
respone.write("<br>抢救成功。进程ID:" + pid);
respone.flush(); //把当前时间打印出来
var t = new Time();
print userName + "抢救了服务器。" + oldid + "===>" + pid + t.strftime(" [%Y/%m/%d %H:%M:%S]");
}
}

之后从官网(http://www.cbrother.net/)下载CBrother,然后再控制台输入启动命令

d:\cbrother_v2.1.0_win64\cbrother.exe d:\cbrother\check.cb,服务器就启起来了。

然后可以通过手机访问这个端口重启服务器了

输入账号密码重启

再打电话也不用急急忙忙去找电脑了,手机一点就OK,打电话的人自己页可以重启了。

服务器界面显示

总体来说,CBrother脚本很符合我的编程理念,而且封装的很简单,后面还要深入学习下。

CBrother脚本10分钟写一个拯救“小霸王服务器”的程序的更多相关文章

  1. 10分钟写一个markdown编辑器

    marked.js Marked是一个Markdown解析引擎. vue.js Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vu ...

  2. 10 分钟实现一个自己的server监控器

    需求 近期须要给自己的server加入监控器.目的是监控server的内存.CPU.磁盘占用率,资源占用率过高的话能给自己发个提醒.当前主流的平台通常会提供邮件.短息.甚至会提供微信提醒,只是这类提醒 ...

  3. 10分钟搭建一个小型网页(python django)(hello world!)

    10分钟搭建一个小型网页(python django)(hello world!) 1.安装django pip install django 安装成功后,在Scripts目录下存在django-ad ...

  4. Django从Models 10分钟定制一个Admin后台

    目录 Django从Models 10分钟建立一套RestfulApi Django从Models 10分钟定制一个Admin后台 简介 Django自带一个Admin后台, 支持用户创建,权限配置和 ...

  5. 郑晔谈 Moco 框架的开发:写一个好的内部 DSL ,写一个表达性好的程序

    作者:张龙 出处:http://www.infoq.com/cn/news/2013/07/zhengye-on-moco 郑晔谈Moco框架的开发:写一个好的内部DSL,写一个表达性好的程序 作者  ...

  6. 用ASP.Net写一个发送ICQ信息的程序

    用ASP.Net写一个发送ICQ信息的程序 这里我给大家提供一个很实用的例子,就是在线发送ICQ信息.想一想我们在网页上直接给朋友发送ICQ信息,那是多么美妙的事情啊.呵呵,在吹牛啊,其实ICQ本来就 ...

  7. 《用Java写一个通用的服务器程序》01 综述

    最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...

  8. 写一个带文本菜单的程序,菜单项如下 (1) 取五个数的和 (2) 取五个数的平均值 (X) 退出。

    问题: 写一个带文本菜单的程序,菜单项如下(1)    取五个数的和 (2)     取五个数的平均值(X)    退出. 由用户做一个选择, 然后执行相应的功能.当用户选择退出时程序结束. 实现: ...

  9. python scrapy 入门,10分钟完成一个爬虫

    在TensorFlow热起来之前,很多人学习python的原因是因为想写爬虫.的确,有着丰富第三方库的python很适合干这种工作. Scrapy是一个易学易用的爬虫框架,尽管因为互联网多变的复杂性仍 ...

随机推荐

  1. 【Feign】自定义配置

    [Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...

  2. 使用 Vue + axios 时,返回状态200,返回值被浏览器拦截

    目录 一.前言 二.解决方案 1. 在全局定义 2. 单独定义 一.前言 在使用 Vue + TypeScript + axios 时,后端已经配置了Cors的前提下,但是在请求接口的时候,返回状态为 ...

  3. spf13-vim安装成功

    之前安装好像都没有出现这个画面,说明我安装得不完整吧!有一个html括号匹配的插件要求输入username和password,不知所以然,没安装上,其他应该一切正常.纪念一个!

  4. 《Java基础知识》Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  5. 浅析堆栈段,BBS段,数据段,代码段

    文章目录 1. 进程,线程 2. 堆栈段 3. BBS段 4. 代码段 5. 数据段 6. 例子 7. 总结 1. 进程,线程 所谓进程是指在系统中能独立运行并作为资源分配的基本单位,程序段,数据段和 ...

  6. JSON2ABAPType:根据JSON数据结构生成ABAP类型定义

    一图表明本文将要介绍的工具: JSON是常见的数据格式,经常用于接口开发.ABAP开发者通常使用/ui2/cl_json来把JSON数据转换为相应的ABAP类型. 在转换前,必须要定义相应的ABAP类 ...

  7. 位域-isa指针

    一.isa指针结构 union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bi ...

  8. 用百度大脑技术让AI做回新闻主播!

    实现效果: 利用百度新闻摘要能力和微信小程序,快速抽取新闻摘要内容并进行语音播报,让AI做回新闻主播!本文主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块,都是干货哦!! 想了解pytho ...

  9. MPV源码探究:背景及准备工作

    背景及准备工作 一点历史 古有魏蜀吴三分天下,今有 Mplayer.MPC.VLC 三分天下.这个世界观太庞大,忍不住先讲一点多媒体播放器的历史.实际上目前市面上的开源播放器主要基于三种技术栈: Mp ...

  10. centos6.5安装supervisor

    centos6.5安装supervisor,有很多种方法,但是有很多坑,为了以后不重复踩坑,这里记录一下. 一.如果用yum install supervisor, 默认安装的是2.1.9版本,2.x ...