linux系统下使用chkconfig实现tomcat开机自启动

使用过tomcat的都知道,可以直接从官网下载tar压缩包然后解压缩使用。这种方式在服务器被重启后不会自动启动,需要登录服务器手动启动一下tomcat。如果想在在开机的时候自动启动该怎么办?

最简单的方法,只需要添加一行代码到/etc/rc.d/rc.local的最后:

/alidata/apache-tomcat-7.0.57/bin/startup.sh

上面的路径就是要启动的tomcat启动文件路径。

好了,现在问题解决,如果不想折腾的可以收手了。


这种方式虽然简单,但是不好管理。如果有多个程序需要自启动,比如mysql、nginx、svnserve的话就要每次都修改配置文件,以后不想要自启动的时候还需要手动注释或者删除相应的配置。

下面就是chkconfig出场了,使用chkconfig可以方面配置可启动程序在开机的启动状态,一行命令开启或关闭,当然第一次的配置是没那么简单的。

这里还是以tomcat为例子。

第一步:创建tomcat启动控制脚本,命名为tomcat-blog

#! /bin/sh
# chkconfig: 2345 95 15
# 上面配置说明:3 - 系统启动等级、100 - 启动优先权、15 停止优先权。
# 假如使用了mysql服务则此处的启动顺序最好应该在mysql之后,脚本根据优先权数字正序排列依次执行。
# 优先权数字需要小于100
# 可以使用chkconfig --add tomcat-blog 或者 update-rc.d -f tomcat-blog defaults 添加到系统服务

#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
TOMCAT_HOME=/alidata/apache-tomcat-7.0.57
PID=/var/run/tomcat-blog.pid
NAME=tomcat-blog
runpid="";

if [ -f "$PID" ]; then  
  runpid=`cat $PID` 
fi

do_status(){
    if [ -n "$runpid" ]; then  
    echo "$NAME (pid $runpid) is running"  
    else
    echo "$NAME not running"  
    fi
}

do_start(){
  [ -n "$runpid" ] && echo "$NAME (pid $runpid) is running" && exit 0
  $TOMCAT_HOME/bin/startup.sh
}

do_stop(){
  [ -z "$runpid" ] && echo "$NAME not running" && exit 0
  $TOMCAT_HOME/bin/shutdown.sh

  # 如果程序使用了ThreadPoolExecutor可能会导致tomcat关闭时间过长而不删除pid文件
  # 然后下次启动时因为pid文件已经存在所以无法正启动
  cat /dev/null > $PID
}

do_restart(){
  do_stop
  do_start
}

case $1 in
  start)
  echo "Starting tomcat-blog..."
  do_start
  echo "."
  ;;
  stop)
  echo "Stopping tomcat-blog..."
  do_stop
  echo "."
  ;;
  restart)
  echo "Restart tomcat-blog"
  do_stop
  do_start
  echo "."
  ;;
  status)
  do_status
  echo -n "."
  ;;  
  *)
  echo "Usage: {start|stop|status}"
  ;;
esac

exit 0


第二步:把tomcat-blog添加到系统服务

先移动tomcat-blog文件到/etc/rc.d/init.d目录下,并添加可执行权限 

chmod +x tomcat-blog

然后在/etc/rc.d/init.d目录下执行如下命令

chkconfig --add tomcat-blog

然后就可以使用chkconfig --list命令查看下是否成功添加到了系统服务

如果显示结果包含如下内容,则添加成功。

tomcat-blog     0:off   1:off   2:on    3:on    4:on    5:on    6:off


第三步:修改tomcat的配置文件设定pid文件位置,默认不产生pid

修改tomcat的bin目录下catalina.sh文件,添加如下一行到文件注释结束的下一行:

CATALINA_PID=/var/run/tomcat-blog.pid

修改后部分内容如:

CATALINA_PID=/var/run/tomcat-blog.pid
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false
darwin=false

注意:如果tomcat正在运行则需要先停止,否则修改文件后再对tomcat执行shutdown命令则会提示$CATALINA_PID was set but the specified file does not exist。这样只能手动kill一下tomcat进程。


添加完毕,测试下是否正常:

启动tomcat执行    service tomcat-blog start

停止tomcat执行    service tomcat-blog stop

查询tomcat运行状态 service tomcat-blog status

提交评论