繁体   English   中英

Tomcat的Upstart脚本在Ubuntu上重生

[英]Upstart script for Tomcat respawn on Ubuntu

我正在使用foreman export upstart /etc/init来设置tomcat app服务器,这样可以在Ubuntu中监视和维护可用性。

但是我想提出一些建议:

1)用sudo service tomcat start启动我的实例后启动sudo service tomcat start ...如果我尝试使用kill <pid>kill <pid>进程...我可以看到它立即被Upstart实用程序重生......但它太快了! 所需的端口尚未发布。 解决这个问题的解决办法是什么?

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-nio-8443"]
8 java.net.BindException: Address already in use
9       at sun.nio.ch.Net.bind0(Native Method)
43 Caused by: java.net.BindException: Address already in use
44      at sun.nio.ch.Net.bind0(Native Method)

2)我使用initctl list | grep tomcat initctl list | grep tomcat找出pid (在这种情况下是3518)并杀死进程:

$ initctl list | grep tomcat
  tomcat start/running
  tomcat-web-1 start/running, process 3518
  tomcat-web start/running

是否有可能杀死tomcat-web-1实际上是一种测试Upstart重生能力的错误方法?

3)另一个挑战是,如果我只做一次或两次,我会很快遇到内存问题:

376 Error occurred during initialization of VM
377 Could not reserve enough space for object heap

4)最后,默认脚本似乎只处理错误的退出条件的respawn。 但是机器重启并不算作其中之一那么应该如何增强从foreman export upstart /etc/init的导出来处理这种情况?

我想知道是否有其他人遇到过类似的挑战和/或有解决方法吗?


更新#1(2013年3月4日):

要完成(4),我只需要编辑appname.conf文件的start on语句以包含start on (... OR runlevel [2345])

在Step2中,列出的所有三个结果实际上都是unix进程。 它们都不是tomcat java webserver。 所以你正在杀死其中一个进程,它可以帮助你监控实际的tomcat / java进程,当它恢复时...它会尝试再次启动tomcat。 运行tomcat的端口从未被释放,内存仍在使用中,因为您永远不会关闭原始的tomcat! 因此,您将体验(1)和(3)。

识别java进程的更好/更简单的方法是将其视为系统监视器等实用程序。 您将看到名为“java”的进程,并且将在此处列出进程ID。 现在为该pid发出一个kill,它会向你演示foreman + upstart respawn工作得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM