远程安装软件控制台

最近三个月来项目组一直在做这个项目,我也一直在看他们写的代码,现在梳理一下项目的流程。

这是一个远程安装服务的控制台(javase ,web项目)。

将软件需要的安装包远程复制到节点---》安装---》启动服务---》进行监控

注意事项:

前提准备:

(1)远程调用命令最基本的,不用说(复制,解压,删除,遍历目录,查看文件内容)。

(2)管理服务的命令(启动,停止,重启)。公司有个管理软件(像软件管家一样),对安装的服务进行管理,前提是要正确打包。

(3)监控服务状态,zabbix监控

项目展开:

每个服务都有自己的安装包,要安装那些服务就激活那些服务的安装包:

一、激活安装包:

1>记录安装包的路径(class.getResource("/packages/").getFile())

http://blog.csdn.net/lcj8/article/details/3502849(准确获得安装包的路径。)

排除linux和windows路径问题:File.separator,java File类自动区分路径符号“/” 或“\”

2>记录配置文件的一切信息:(1)默认配置文件(及配置模板)的路径,(2)配置文件的配置内容(宏的起始终止位置,参数配置的信息)

其中读取文件,json都是重复使用的技术。 json例子参见:http://blog.csdn.net/u010738184/article/details/49155013

二、扫描节点 :

利用远程调用的接口: 1>检查安装环境(linux,windows),是否可达  2>复制 管理和监控软件到远程。3>利用管理软件安装和启动监控软件。

最后初始化数据库数据,将节点信息(扫描的信息)存入数据库。

三、安装软件:

1>检查安装环境  2>远程复制安装包 3>用管理软件安装并启动

其中有很多小细节: 

   (平台不同则安装包不同,配置文件是否修改,是否新添进配置组等。)

四、修改软件的配置文件,还有配置组的概念:

1>要更改关联的数据信息。2>是否有配置组

逻辑关系:前台传来的数据 :配置组 (配置文件修改,替换宏中的内容(读文件,写文件  json数据格式,替换更加方便)。)

1>修改了配置 &&  传来的配置组为空  ---->直接将配置信息存入 配置实例表,不在配置组表中插入数据。

2>修改了配置  && 传来的配置组不为空--->将配置信息存入 配置实例表,同时将组信息存入配置组表。

3>没有修改配置-------------------------------->将配置信息存入配置实例表。

注:由于配置组表与配置实例表的关系,此时在1步中,配置实例信息与配置组没有关联关系,则配置实例中的配置组id列没有数据,(可指定插入一个数值)

(1)基于组来修改配置文件: -->将与组相关的所有配置文件所在的主机都进行修改,再重启服务

(2)修改单个主机上的配置文件 :--->在本地替换配置文件中的宏再复制到远程,重新启动服务。

(3)修改配置文件的组信息:   分为安装时修改||安装完成后修改。(步骤同上)

五、监控,告警(这一部分还要深入看,以后再写)

六、技术总结:

       这是我工作中的第二个项目(是大学毕业后的第一个项目),说实话,在前期开会时,他们说的这些操作流程,我真的完全没有概念,一直都是模模糊糊,不知道他们在说什么?也有很多名词都是第一次接触,他们说不懂就问,可是那时候,我好想什么都不懂,可是又不知道该问什么?就这样稀里糊涂开始了我的工作。带我的那个人给我分配了一小部分工作,让我看需求。我基本上一直在看需求。在前期,我们要写最基本的远程调用接口,然后是软件安装这一部分。

1>我负责linux端远程调用函数的编码,主要用到jsch.jar,开始读源码,测试。

这里学到了最基本的linux指令,ps,ls,df -h,tar。

2>软件安装部分,软件状态的控制(启停,重启),软件卸载。

学到的知识:

java高级部分的知识,以前在学校这些都是别忽略的,在工作中却是经常用到的(有时会感觉学校教的 真是连皮毛都没有)。

<1>java异常知识:异常怎样处理,try {} catch() { } ,catch (){} 中可以捕获异常-->自己消灭。抛出异常--->让系统处理

  throw new RuntimeException(e); 转换成unchecked异常。

<2>java I/O流的操作,读写文件,json

<3>java集合的知识,map ,map.entity();

<4>java的多线程:run(){}

Spring的一些知识:

<1>Spring的事务处理 :@Transaction,DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态transactionManager.commit();

事务在抛出异常后回滚。

<2>Spring 的定时任务调度Quartz

通过配置.xml,来定时执行类中的函数代码。(还有其他的方法,会继续研究)

尚待努力:

(1)数据库postgres: 

(2)redis(键-值的存储,有时间会好好研究一下)

(3)定时器(任务调度)

(4)zabbix

这是一些学到的知识和未学到的知识的总结。

七、其他方面的总结:

   真心觉得技术架构工程师真不是盖的,依靠的是经验和能力,他们能够描绘项目的整个流程,对项目遇到的问题有整体的预测和把握,这是需要长期的项目积累实践而来的。

   要从多方面思考问题,多问几个为什么?理清思路再进行编码。



                

       





《未完待续》



你可能感兴趣的:(远程安装软件控制台)