Asp.net控制Tomcat启动关闭的实现方法
一、场景
近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等1天它缓存过期后才生效。由于项目进度我们不可能将这个权限系统推翻重来。
可行的方式是在管理员操作界面上增加权限系统重启按钮。这样客户在修改权限后可以很方便的重启Tomcat。
二、技术分析
由于管理员系统是基于.net的BS方式。所以我们要能通过网页控制Tomcat的关闭启动,并加载进管理员系统中。
首先分析Tomcat的启动方式。在Tomcat6.0的bin目录下有两个批处理文件。startup.bat和shutdown.bat分别控制着Tomcat的启动和关闭。我们要控制Tomcat的启动关闭就得调用这两个批处理文件。
怎么调呢?在哪调呢?浏览器直接调那是不可能的。必须得在web服务器上部署个web页面,在服务端调用这两个命令。如果部署在权限系统内部那是最好的,不过这会产生一个问题,我们可以关闭Tomcat,但却无法启动。最终的方案是在同一台机子上部署个.net实现的webservice,通过这个webservice实现权限系统的启动和关闭。
三、具体实现
在VS2008中创建一个web service项目。
创建两个WebMethod。
1.启动Tomcat方法
/// <summary>
/// 启动权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[WebMethod]
public bool StartPM()
{
try
{
// 创建进程启动信息
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "start.bat");
// 获取系统环境变量
IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
foreach (string key in dics.Keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.UseShellExecute = false;
Process.Start(sinfo);
}
catch (Exception ex)
{
//TODO: 写日志
return false;
}
return true;
}
关闭Tomcat方法
/// <summary>
/// 关闭权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[WebMethod]
public bool StopPM()
{
try
{
// 创建进程启动信息
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");
// 获取系统环境变量
IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
foreach (string key in dics.Keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.UseShellExecute = false;
Process.Start(sinfo);
}
catch (Exception ex)
{
//TODO: 写日志
return false;
}
return true;
}
为了方便以后配置我有新建了两个bat文件。在这两个文件中分别做调用Tomcat的startup.bat和shutdown.bat的操作。具体如下:
1.start.bat
K:\apache-tomcat-6.0.30\bin\startup.bat
2.stop.bat
K:\apache-tomcat-6.0.30\bin\shutdown.bat
四、总结
整个开发过程中出现了无法找到CATALINA_HOME、JAVA_HOME环境变量的错误,那是因为父进程也就是web service的环境变量中并没有这两项,所以创建子进程时(子进程的环境变量继承于父进程)也没有这两项。只得从系统环境变量中获取环境变量重新添加进新启动的进程中。同时必须明确的是进程的工作目录不等于进程的启动目录。比如
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");
如果去掉AppDomain.CurrentDomain.BaseDirectory将报无法找到stop.bat 的错误,就是因为工作目录和启动目录不一致导致。
Asp.net控制Tomcat启动关闭的实现方法的更多相关文章
- Tomcat启动失败的解决方法
在使用Tomcat的时候,经常会遇到启动失败的问题:解决方法:1.检查环境变量的配置,jdk的配置2.检查端口是否被占用. 关于环境变量的配置很容易搜到,如果按照网上的教程配置好了,但是还是启动失败的 ...
- 关于form表单提交到Servlet的时候出现tomcat启动错误的解决方法
1.遇到的问题 今天在写jsp代码的时候通过form表单提交到Servlet的时候出现的tomcat启动错误,琢磨了半天,终于找到了解决方法. 解决问题的关键就在于xml配置的路径和servlet中默 ...
- tomcat 启动 关闭 重启脚本
启动 #!/bin/bash # Author:wanglan # Mail:@qq.com # Fuction:Tomcat Start/stop/restart script # Version: ...
- Linux下Tomcat启动关闭命令
1.首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 2.查看Tomcat是否以关闭 ps -ef|grep tomcat 如果显示以下信息,说明Tomcat还没 ...
- Tomcat启动中文乱码解决方法
一:解决方法一: 1.查看电脑系统的编码 针对Windows平台下,点击运行--输入cmd,enter键进入命令窗口,输入:chcp可以得到操作系统的代码页信息(代码页:字符集编码的别名),可以从控制 ...
- tomcat 启动闪退解决方法
当我们在windows上面进行项目的部署与启动的时候有的时候tomcat在进行启动的时候会删一下就退了,这个时候一般是里面启动的时候设置的jdk的问题下面咱们来看一下具体解决方案 编辑我们的start ...
- Tomcat启动就执行特定方法
import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContex ...
- tomcat启动完成执行 某个方法 定时任务(Spring)
第一步引入接口: ServletContextListener @RestController @RequestMapping("/schedule") public class ...
- CentOS7.4 系统下 Tomcat 启动慢解决方法
CentOS7.4 系统下 Tomcat 启动慢解决的方法 首先查看日志信息,查看因为什么而启动慢 在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是s ...
随机推荐
- python错误处理/调试/单元测试/文档测试
一.错误处理 1.错误处理 try: ... except Exception1: ... except Exception2: ... finally: ... 如果在try中发生错误,那么exce ...
- "no talloc stackframe at ../source3/param/loadparm.c:4864, leaki
This problem related to the samba PAM module. You have 2 solution at all. Solution 1#: Remove it( as ...
- [Swift A] - HTTP请求
iOS开发中大部分App的网络数据交换是基于HTTP协议的.本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法. 注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格式为J ...
- javascript对于0的解读
CreateTime--2017年6月29日10:36:01Author:Marydon javascript对于0的解读 1.0与“0” 1.1 判断0与"0"是否相等 测试 ...
- 串的匹配:朴素匹配&KMP算法
引言 字符串的模式匹配是一种经常使用的操作. 模式匹配(pattern matching),简单讲就是在文本(text,或者说母串str)中寻找一给定的模式(pattern).通常文本都非常大.而模式 ...
- IT精英们不断上演的十大傻事(组图)
http://fellow.51cto.com/art/200807/80475.htm
- angular过滤器使用 自定义过滤器
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- php实现IP地址和数字相互转换
echo $a=ip2long ("202.97.224.68");//地址转换成数字 系统自带的函数 注:这里面有一个要注意的地方,大概由于PHP无法正确判断转换完的数字类型,出 ...
- Current thread must be set to single thread apartment (STA) mode before OLE,当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。
Add the STAThreadAttribute attribute on the Main method. This attribute is required if your program ...
- jmeter测试http请求使用csv参数
创建参数化文件 线程组添加CSV Data Set Config配置元件 为请求添加参数 重新运行查看结果 使用随机参数(JMeter有好多函数可以使用) 查看结果发现使用随机生成的数字 3