QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2014|回复: 1

Linux下两种自动启动Tomcat的方法

[复制链接]
发表于 2010-6-11 10:42:17 | 显示全部楼层 |阅读模式
有很多办法可以让Tomcat在系统启动的时候自动运行,我这里介绍两种方法,一种简单,另外一种复杂而专业。在介绍这两个方法前你应该先装JDK,Tomcat。Tomcat的安装很简单,下载二进制压缩包 xxx.tar.gz ,用 tar zxvf xxx.tar.gz -C [target],[target]是安装Tomcat的目录。设置环境变量JDK_HOME和JAVA_HOME都指向JDK的安装目录即可。

    一. 简单的方法

    Tomcat安装目录下的bin目录有两个脚本分别用来启动和停止Tomcat,分别是startup.sh, shutdown.sh,你可以用这两个脚本来手工启动和停止Tomcat服务并进行安装后的测试。

    我们最简单的方法就是通过startup.sh来自动启动Tomcat,编辑/etc/rc.d/rc.local 增加内容(假设JDK目录是/usr/jdk,Tomcat目录是/apache/tomcat)

export JDK_HOME=/usr/jdk
export JAVA_HOME=/usr/jdk
/apache/tomcat/bin/startup.sh


    这样在系统重启后就可以自动启动Tomcat

    二. 复杂而专业的方法

    前面介绍的应该是最简单的让Tomcat自动启动的方法了,但是它有两个不足
    1. 无法指定启动Tomcat服务的用户,会导致Tomcat已超级用户运行,存在重大的安全隐患
    2. 系统关闭的时候无法自动停止Tomcat服务

    在Linux下,Tomcat可以作为一个守护进程来启动以及停止,这个必须借助于项目commons-daemon中的jsvc工具。Tomcat安装完后就带有这个工具的源码{tomcat}/bin/jsvc.tar.gz。按照下列命令安装这个工具:

解压: tar zxvf jsvc.tar.gz
配置: cd jsvc-src
        chmod +x configure
       ./configure --with-java=/usr/jdk
编译: make
检验: ./jsvc -help


    jsvc工具本身带了一个脚本用来启动和停止Tomcat守护进程,但是在试验中发现该脚本无法设置为自动启动,显示的错误信息是:tomcat 服务不支持 chkconfig,因此修改了此脚本,可以从此处下载:tomcat.txt

    修改下载的脚本里面有关路径的信息以及要启动Tomcat的用户(用户必须已存在),拷贝脚本到/etc/rc.d/init.d目录下的tomcat文件,给该脚本赋予可执行权限(chmod +x tomcat),你可以使用命令/etc/rc.d/init.d/tomcat start|stop 来验证守护进程是否可以正常启动和停止。

    接下来就是把这个脚本设置成系统启动时自动执行,系统关闭时自动停止,使用如下命令:
    chkconfig --add tomcat

    重新启动系统后可以启动的过程中看到Starting Tomcat ..... [OK]的信息,这样就完成设置过程。(T111)
发表于 2010-6-11 12:37:31 | 显示全部楼层
  1. #! /bin/sh

  2. # chkconfig: 35 96 04
  3. # description: Apache-Tomcat service script.

  4. # Version:
  5. #        2008-01-17-01
  6. # By:
  7. #        Typhoon.Free.Wolf.

  8. # Service name.
  9. SVC_NAME="Apache-Tomcat"
  10. # Lock file.
  11. LOCK_FILE="/var/lock/subsys/tfw_tomcat"
  12. # Installation prefix.
  13. APP_HOME="/ext/prog/c/Apache/Tomcat"
  14. # The process name to monitor.
  15. APP_PROC="java"
  16. # Authorize user.
  17. APP_USER="userXXX"

  18. SLEEP_START=5
  19. SLEEP_STOP=$SLEEP_START

  20. # Importing functions.
  21. flg_func=0
  22. if [ -f /etc/init.d/functions ] ; then
  23.         . /etc/init.d/functions
  24.         flg_func=1
  25. elif [ -f /etc/rc.d/init.d/functions ] ; then
  26.         . /etc/rc.d/init.d/functions
  27.         flg_func=1
  28. fi

  29. # Templete.
  30. # Return:
  31. #        FLG_PROC_ON means process is there.
  32. #        FLG_PROC_OFF means process not exists.
  33. #        Other means error.
  34. FLG_PROC_ON=1
  35. FLG_PROC_OFF=0
  36. probe() {
  37.         srch_rst=$(ps -A|grep $APP_PROC|awk '{print $4}')
  38.         for rst in $srch_rst ; do
  39.                 if [ $APP_PROC = $rst ] ; then
  40.                         return $FLG_PROC_ON
  41.                 fi
  42.         done
  43.         return $FLG_PROC_OFF
  44. }

  45. # Templete.
  46. #        Shows OK.
  47. # Return:
  48. echo_ok() {
  49.         case $flg_func in
  50.                 1)
  51.                         echo_success
  52.                         echo ""
  53.                 ;;
  54.                 *)
  55.                         echo ""
  56.                         echo "        [  OK  ]"
  57.                 ;;
  58.         esac
  59. }

  60. # Templete.
  61. #        Shows Passed.
  62. # Return:
  63. echo_pass() {
  64.         case $flg_func in
  65.                 1)
  66.                         echo_passed
  67.                         echo ""
  68.                 ;;
  69.                 *)
  70.                         echo ""
  71.                         echo "        [PASSED]"
  72.                 ;;
  73.         esac
  74. }

  75. # Templete.
  76. #        Shows Failed.
  77. # Return:
  78. echo_bad() {
  79.         case $flg_func in
  80.                 1)
  81.                         echo_failure
  82.                         echo ""
  83.                 ;;
  84.                 *)
  85.                         echo ""
  86.                         echo "        [FAILED]"
  87.                 ;;
  88.         esac
  89. }

  90. # Templete.
  91. #        Start section.
  92. # Return:
  93. _start() {
  94.         probe
  95.         proc=$?
  96.         echo ""
  97.         echo "Starting $SVC_NAME..."

  98.         if (touch $LOCK_FILE) ; then
  99.                 echo_ok
  100.         else
  101.                 echo_bad
  102.         fi
  103. }

  104. start() {
  105.         probe
  106.         proc=$?
  107.         echo ""
  108.         echo "Starting $SVC_NAME..."

  109.         if [ $FLG_PROC_OFF = $proc ] ; then
  110.                 if (su - $APP_USER -c "$APP_HOME/bin/startup.sh") ; then
  111.                         sleep $SLEEP_START
  112.                         if (touch $LOCK_FILE) ; then
  113.                                 echo_ok
  114.                         else
  115.                                 echo_pass
  116.                                 echo ""
  117.                         fi
  118.                 else
  119.                         echo_bad
  120.                 fi
  121.         elif [ $FLG_PROC_ON = $proc ] ; then
  122.                 if (touch $LOCK_FILE) ; then
  123.                         echo_passed
  124.                         echo ""
  125.                 else
  126.                         echo_bad
  127.                 fi
  128.         fi
  129. }

  130. # Templete.
  131. #        Stop section.
  132. # Return:
  133. _stop() {
  134.         probe
  135.         proc=$?
  136.         echo ""
  137.         echo "Stopping $SVC_NAME..."

  138.         if (rm -Rf $LOCK_FILE) ; then
  139.                 echo_ok
  140.         else
  141.                 echo_bad
  142.         fi
  143. }

  144. stop() {
  145.         probe
  146.         proc=$?
  147.         echo ""
  148.         echo "Stopping $SVC_NAME..."

  149.         if [ $FLG_PROC_OFF = $proc ] ; then
  150.                 if (rm -Rf $LOCK_FILE) ; then
  151.                         echo_passed
  152.                         echo ""
  153.                 else
  154.                         echo_bad
  155.                 fi
  156.         elif [ $FLG_PROC_ON = $proc ] ; then
  157.                 if (su - $APP_USER -c "$APP_HOME/bin/shutdown.sh") ; then
  158.                         sleep $SLEEP_STOP
  159.                         if (rm -Rf $LOCK_FILE) ; then
  160.                                 echo_ok
  161.                         else
  162.                                 echo_pass
  163.                                 echo ""
  164.                         fi
  165.                 else
  166.                         echo_bad
  167.                 fi
  168.         fi
  169. }

  170. # Parse command line parameters.
  171. case $1 in
  172.         start)
  173.                 start
  174.         ;;
  175.         stop)
  176.                 stop
  177.         ;;
  178.         restart)
  179.                 stop
  180.                 start
  181.         ;;
  182.         *)
  183.                 # Print help
  184.                 echo "Usage: $0 {start|stop|restart}"
  185.                 exit 1
  186.         ;;
  187. esac

  188. exit 0
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-19 21:14 , Processed in 0.147680 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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