Jsvc 是专为 Java 应用程序开发的一个工具包,其目标是把 Java 应用程序的普通运行转换为可以配置某个普通用户以 Unix 守护进程的方式运行。这样的话,可以很方便地启动 / 停止应用程序,同时也可以支持开机自启。开机自启tomcat是比较重要的,可以保证由于意外而使机器需要重启时不需要手动重启tomcat就可以自动恢复服务。
简而言之,在生产环境中我们需要将tomcat配置成以daemon守护进程来运行,主要有以下几个原因:
以daemon方式运行tomcat可使tomcat不受终端影响,不会因为退出终端而停止运行。可以让tomcat以普通用户身份运行。可以让tomcat在系统启动时自动运行。Tomcat 安装包的 bin 子目录下就包含了 Jsvc 工具包的源码,整个建立过程很方便,如下。
假设java8的安装目录是 /usr/softwares/jdk1.8.0_181
#解压安装tomcat8.5 cd /usr/softwares/ tar -xzvf apache-tomcat-8.5.34.tar.gz #解压安装tomcat中的jsvc cd apache-tomcat-8.5.34/bin tar -xzvf commons-daemon-native.tar.gz cd commons-daemon-1.1.0-native-src/unix/ ./configure --with-java=/usr/softwares/jdk1.8.0_181 make cp jsvc /usr/softwares/apache-tomcat-8.5.34/bin默认当前目录在 /usr/softwares/apache-tomcat-8.5.34/bin
参数说明:
TOMCAT_USER=root,以root用户来执行tomcat程序
debian系统支持 update-rc.d 命令添加/删除服务
#若/etc/init.d/tomcat已存在,则需要先删除 vim /etc/init.d/tomcat #!/bin/bash ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: tomcat 8.5 auto start ### END INIT INFO ################################################ tomcat_daemon=/usr/softwares/apache-tomcat-8.5.34/bin/daemon.sh start() { echo -n "Starting tomcat: " ${tomcat_daemon} start echo "tomcat start ok" } stop() { echo -n "Shutdown tomcat: " ${tomcat_daemon} stop echo "tomcat stop ok" } #how we were called case "$1" in start) start ;; stop) stop ;; restart) stop sleep 10 start ;; *) echo "Usage: $0 {start|stop|restart}" esac exit 0参数说明 Default-Start 默认在这些级别,启动 Default-Stop 默认在这些级别,停止
#授权 chmod 777 /etc/init.d/tomcat #添加tomcat服务,以默认的级别defaults(即2,3,4,5启动;0,1,6停止),且启动顺序为40,关闭顺序为80 update-rc.d tomcat defaults 40 80科普update-rc.d:
在用这个命令前,需要把执行文件放到 /etc/init.d 目录下,注意,若此服务已经存在想要修改,建议是先删除了再重新添加。
添加服务的命令:
update-rc.d 执行文件名 start 20 2 3 4 5 . stop 80 0 1 6 . 相当于 update-rc.d 执行文件名 defaults 20 80删除服务的命令:
update-rc.d -f 执行文件名 remove查看开机自启动服务是否添加成功,可以查看 /etc/rc*.d 目录下是否存在这些执行文件名的软链接。
其实服务级别0,1,2,3,4,5,6在目录 /etc 下有对应的文件目录:rc0.d,rc1.d,rc2.d,rc3.d,rc4.d,rc5.d,rc6.d。
若设置在相应级别下启动,则该级别目录下会有以S开头(start的意思)的执行文件名;若设置在相应级别下停止,则该级别目录下会有以K开头(kill的意思)的执行文件名。
查看服务的命令:
ls /etc/rc*.d
最后,重启机器,再查看下该进程就可以知道是否开机自启动了。
reboot ps -aux|grep tomcat默认当前目录在 /usr/softwares/apache-tomcat-8.5.34/bin
参数说明 chkconfig 的2345表示默认服务级别,启动顺序为20,关闭顺序为80
TOMCAT_USER=root,以root用户来执行tomcat程序
centos系统支持 chkconfig 命令添加/删除服务
cp daemon.sh /etc/init.d/tomcat #添加tomcat服务 chkconfig --add tomcat chkconfig --list tomcat #查看服务是否添加成功关于chkconfig命令比较简单,网上也随便可以找到详情,这里就不多说了。
最后,重启机器,再查看下该进程就可以知道是否开机自启动了。
reboot ps -aux|grep tomcatPS:若是非root启动的tomcat项目中有上传文件的功能,会有文件上传不上去的情况,需要把上传目录所属的用户和组改成与tomcat安装目录一致才行。
我遇到的报错:
java.io.FileNotFoundException: /develop/apache-tomcat-8.0.48/work/Catalina/localhost/chat/upload_69c818da_22b3_41b2_b042_941fc7281223_00000004.tmp (No such file or directory)其他人遇到的报错:
Processing of multipart/form-data request failed. /usr/local/apache-tomcat-9.0.4/work/Catalina/localhost/EDoctor/upload_50259820_2122_4f77_af6d_17f1fd261a13_00000001.tmp (Permission denied)