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

[经验分享] tomcat 启动

[复制链接]

尚未签到

发表于 2017-1-15 08:51:21 | 显示全部楼层 |阅读模式
Tomcat 默认情况下,不管在Windows还是Linux下,都不是作为服务来启动的。本文通过总结在Windows 和 Linux下,把Tomcat改造成服务(守护)进程的方法。
         以下均以Tomcat 6 为前提。
        主要来源:

         http://light6891.blog.163.com/blog/static/9696290920101036655926/
         http://blog.csdn.net/scs2000/article/details/1935397
         http://alohawu.blog.iyunv.com/3208572/586403


         一   Windows 下 Tomcat 服务进程改造
        

安装好tomcat6后,在bin目录有这三个文件 tomcat6w.exe /tomcat6.exe / startup.bat 他们都与启动tomcat有关。
 
tomcat6.exe这个文件是用来启动tomcat的 ,双击它出现个DOS样子的窗口一闪而过消失了,tomcat也没有启动成功。双击tomcat6w.exe弹出个错误对话框,说“指定的服务并未以安装的服务存在。Unable to open the service tomcat6”。其实这两个文件要起作用,必须先为这个tomcat开通服务。
 
tomcat开通服务:
1编辑service.bat文件。
rem Guess CATALINA_HOME if notdefined
set CURRENT_DIR=%cd%

添加下面一句指定tomcat的安装目录(%TOMCAT_PATH%为tomcat安装的绝对路径)。
    set CATALINA_HOME=%TOMCAT_PATH%
    if not "%CATALINA_HOME%" == ""goto gotHome
    set CATALINA_HOME=%cd%

为了在“进程”中跟其他安装的tomcat区分名字,修改tomcat6.exe 的文件名。这里假设修改成tomcat6018.exe。
if exist"%CATALINA_HOME%\bin\tomcat6018.exe" goto okHome
rem CD to the upper dir
cd ..
set CATALINA_HOME=%cd%
:gotHome
if exist "%CATALINA_HOME%\bin\tomcat6018.exe" goto okHome
echo The tomcat.exe was not found...
echo The CATALINA_HOME environment variable is not defined correctly.
echo This environment variable is needed to run this program
goto end
rem Make sure prerequisite environment variables are set
if not "%JAVA_HOME%" == "" goto okHome

echo The JAVA_HOME environment variable is not defined
echo This environment variable is needed to run this program
goto end 
:okHome
if not "%CATALINA_BASE%" == "" goto gotBase
set CATALINA_BASE=%CATALINA_HOME%
:gotBase
 
set EXECUTABLE=%CATALINA_HOME%\bin\tomcat6018.exe

rem Set default Service name
创建服务后的服务名称,这个名称必须唯一。
set SERVICE_NAME=Tomcat6018

创建服务后的服务显示名称,这个名称可以与其他服务显示名称相同。
set PR_DISPLAYNAME=Apache Tomcat 6018

。。。。。。。。。。。。。
"%EXECUTABLE%"//US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"--JvmMs 128 --JvmMx 256
如果你需要把服务设置为开机自启动,可以加上下面这句(位置为文件倒数第三行前面)
sc config %SERVICE_NAME% start=auto
echo The service'%SERVICE_NAME%' has been installed.

:end
cd %CURRENT_DIR%

保存文件。
 
2  运行"cmd"命令,进入DOS界面在bin目录下对service.bat文件执行install命令,若出现以下界面说明服务安装成功。
   运行"services.msc"命令打开服务窗口,发现的确多了一个"Apache Tomcat 6018"的服务,右键查看它的属性,服务名称与显示名称都与之前在service.bat文件的设置一致。
然后,修改tomcat6w.exe的文件名,文件名必须和服务名称一样,如果服务名称与服务执行文件的名称一样,可以改名为服务名称后加"w"。像本例,服务执行文件是tomcat6018.exe,服务名称是Tomcat6018,为了防止出现文件重名冲突因此无法将tomcat6w.exe改名为Tomcat6018.exe,只能改名为tomcat6018w.exe。
现在,可以通过启动这个服务来启动tomcat,双击tomcat6018w.exe打开的界面也可以启动这个服务,启动这个服务实际上就是启动tomcat6018.exe。如果不想用服务方式启动tomcat,可以双击tomcat6018.exestartup.bat启动。
二 Linux Tomcat 服务进程改造
   

catalina.sh是Tomcat 启动和关闭的关键脚本,start.sh和shutdown.sh只是做了一些路径的判断,顺便带个参数过去,具体的开启和关闭是由catalina.sh来实现,故可以考虑把catalina.sh进行改造,然后设置成为系统服务即可。
        

1.首先需要用root用户将$Tomcat_HOME/bin目录下的catalina.sh脚本复制到目录/etc/init.d中,重命名为tomcat4000,文件名即为以后的服务名,并查看该文件有无执行权限,如果没有,增加执行权限;
2.修改刚才复制的tomcat4000脚本:
   a. 在脚本的开头插入下面两行(如果不需要启动时自动运行,则无需添加)
    #chkconfig: 2345 10 90
    # description:Tomcat4000 service
第一行是服务的配置:第一个数字是服务的运行级,2345表明这个服务的运行级是2、3、4和5级(Linux的运行级为0到6);第二个数字是启动优先级,数值从0到99;第三个数是停止优先级,数值也是从0到99。(运行级介绍见附录4.2)
   第二行是对服务的描述
 
    b. 在脚本中设置CATALINA_HOME 和 JAVA_HOME 这两个脚本必需的环境变量这两个脚本必需的环境变量,如:
port="4000"
export CATALINA_HOME=/prog/tomcat/$port
export JAVA_HOME=/prog/jdk1.6.0_22
3.现在就可以用service tomcat start|stop来管理tomcat服务了
4.如果要让服务自动运行,还得将服务添加到系统中去
  切换为root用户,终端运行下列命令,将tomcat服务添加到系统服务中:
        chkconfig --add tomcat4000
       (注意:
     在tomcat文件的头两行的注释语句中,需要包含chkconfig和description两部分内容(确认不要拼写错误,),否则在执行“chkconfig --add tomcat”时,会出现“tomcat服务不支持chkconfig”的错误提示。
    chkconfig这行表示缺省启动的运行级别以及启动和停止的优先级,如该服务缺省不再任何运行级启动,则以 - 代替运行级别。在tomcat中表示脚本在运行级2、3、4、5启动,启动优先权为10,停止优先权为90。
    description行对服务进行描述,可以用 “\” 跨行注释。)

 可以使用setup命令查看系统服务(默认情况下,经过上述命令,已选择开机自动启动,如需取消,则可通过该命令,撤销)



catalina.sh本身支持强制关闭tomcat,但需要一个变量CATALINA_PID,也就是tomcat的进程号,只要我们指定了CATALINA_PID,tomcat启动时就会将进程号写入指定的文件中,所以我们可以在CATALINA_HOME 和 JAVA_HOME后面加上下面的语句:
export CATALINA_HOME=/prog/tomcat/$port
export JAVA_HOME=/prog/jdk1.6.0_22

exportCATALINA_PID=/prog/tomcat/$port/conf/catalina.pid
这样我们关闭tomcat时,就可以使用service tomcat stop –force进行强制关闭,还可以使用service tomcat stop 30 –force设置强制关闭等待时间,单位为秒,默认5秒。
注意事项:
       一旦指定CATALINA_PID,会对tomcat启停造成较大影响,启动时,脚本会检查该文件是否存在,若存在,则说明上次停止应用未成功,脚本报错,终止启动过程。停止时,脚本会检查该文件是否存在,若不存在,脚本报错,终止停止过程;若存在,而脚本找不到文件中的进程号,脚本报错,终止停止过程。所以只要所有的启停都通过service命令来操作,则不会有问题,若直接调用tomcat\bin目录下的脚本进行启停,或者系统异常关闭,导致CATALINA_PID未能正常删除,则会对调用service造成影响,需要手动进行CATALINA_PID文件的删除等操作。必要时,可考虑修改脚本绕过一些判断。


经过上述改造后,命令集如下:
     停服务service tomcat4000 stop等同于调用tomcat本身的shutdown.sh,不会强制杀进程来停止应用
              -force服务未停止时杀进程,默认等待时间为5秒,可通过修改服务脚本中的“SLEEP=5”,修改默认等待时间
            30 -force“整数n“+“-force”, 服务未停止时杀进程,等待时间为n秒
     启服务service tomcat4000 start等同于调用tomcat本身的starup.sh 

 
 后记: 
             改造Tomcat作为服务进程 ,主要是为了UAT环境/生产环境执行命令方便,不需切换目录;
            在实际项目中,是和Hudson打包发布结合使用的;在测试中发现,tomcat进程停掉后,要等一会,通讯端口才能完全释放;即TIME_WAIT状态还需要等2MSL()后才能返回到CLOSED状态,如在TIME_WAIT状态就启动tomcat,则无法建立Listen端口,在实际中,我采用了Sleep(60)后,在启动tomcat方法。
   

运维网声明 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-328583-1-1.html 上篇帖子: Tomcat BIO 下篇帖子: tomcat manager
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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