设为首页 收藏本站
查看: 970|回复: 0

[经验分享] Asp.net控制Tomcat启动关闭

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-6 12:20:10 | 显示全部楼层 |阅读模式
  一、场景
  近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等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方法



1 ///
2 /// 启动权限系统
3 ///
4 /// true:成功;false:失败
5         [WebMethod]
6         public bool StartPM()
7         {
8             try
9             {
10                 // 创建进程启动信息
11                 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "start.bat");
12                 // 获取系统环境变量
13                 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
14                 foreach (string key in dics.Keys)
15                 {// 将系统环境变量加入新进程环境变量中
16                     if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
17                     sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
18                 }
19                 // 不需要从系统外壳程序创建,直接从文件创建
20                 sinfo.UseShellExecute = false;
21                 Process.Start(sinfo);
22             }
23             catch (Exception ex)
24             {
25                 //TODO: 写日志
26                 return false;
27             }
28             return true;
29         }
  2.关闭Tomcat方法



1 ///
2 /// 关闭权限系统
3 ///
4 /// true:成功;false:失败
5         [WebMethod]
6         public bool StopPM()
7         {
8             try
9             {
10                 // 创建进程启动信息
11                 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");
12                 // 获取系统环境变量
13                 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
14                 foreach (string key in dics.Keys)
15                 {// 将系统环境变量加入新进程环境变量中
16                     if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;
17                     sinfo.EnvironmentVariables.Add(key, dics[key].ToString());
18                 }
19                 // 不需要从系统外壳程序创建,直接从文件创建
20                 sinfo.UseShellExecute = false;
21                 Process.Start(sinfo);
22             }
23             catch (Exception ex)
24             {
25                 //TODO: 写日志
26                 return false;
27             }
28             return true;
29         }
  为了方便以后配置我有新建了两个bat文件。在这两个文件中分别做调用Tomcat的startup.bat和shutdown.bat的操作。具体如下:
  1.start.bat  



1 K:\apache-tomcat-6.0.30\bin\startup.bat
  2.stop.bat



1 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 的错误,就是因为工作目录和启动目录不一致导致。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94811-1-1.html 上篇帖子: tomcat记录X-Forwarded-For字段中的远程IP 下篇帖子: 安装Tomcat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表