tomcat使用jsvc启动tomcat,关闭shutdown

tomcat禁用8005端口的时候报错 "SEVERE: No shutdown port configured. Shut down server through OS signal. Server not shut down.",报错原因是因为:

禁用关闭命令端口在tomcat以windows服务或linux等系统的jsvc方式启动时可以生效,在标准shell脚本启动的方式下不会生效,这将阻止shutdown和catalina脚本停止tomcat

所以这里介绍jsvc方式启动tomcat

安装jsvc

[root@iZzm446eh1ux98Z apache-tomcat-8.5.57]# cd bin/

[root@iZzm446eh1ux98Z bin]# tar xfz commons-daemon-native.tar.gz 

[root@iZzm446eh1ux98Z bin]# cd commons-daemon-1.2.2-native-src/unix

[root@iZzm446eh1ux98Z unix]# pwd
/opt/softwares/apache-tomcat-8.5.57/bin/commons-daemon-1.2.2-native-src/unix

编译安装

[root@iZzm446eh1ux98Z unix]#  ./configure --with-java=$JAVA_HOME
*** Current host ***
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking cached host system type... ok
*** C-Language compilation tools ***
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for ranlib... ranlib
checking for strip... strip
*** Host support ***
checking C flags dependant on host system type... ok
*** Java compilation tools ***
checking JAVA_HOME... /opt/softwares/jdk1.8.0_201
checking for JDK os include directory...  linux
gcc flags added
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sys/capability.h usability... no
checking sys/capability.h presence... no
checking for sys/capability.h... no
configure: WARNING: cannot find headers for libcap
*** Writing output files ***
configure: creating ./config.status
config.status: creating Makefile
config.status: creating Makedefs
config.status: creating native/Makefile
*** All done ***
Now you can issue "make"

[root@iZzm446eh1ux98Z unix]# make (cd native; make all) make[
1]: Entering directory '/opt/softwares/apache-tomcat-8.5.57/bin/commons-daemon-1.2.2-native-src/unix/native' gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c jsvc-unix.c -o jsvc-unix.o jsvc-unix.c: In function ‘run_controller’: jsvc-unix.c:1293:20: warning: assignment to ‘__sighandler_t’ {aka ‘void (*)(int)’} from incompatible pointer type ‘void (*)(int, siginfo_t *, void *)’ {aka ‘void (*)(int, struct <anonymous> *, void *)’} [-Wincompatible-pointer-types] act.sa_handler = controller; ^ gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c arguments.c -o arguments.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c debug.c -o debug.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c dso-dlfcn.c -o dso-dlfcn.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c dso-dyld.c -o dso-dyld.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c help.c -o help.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c home.c -o home.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c java.c -o java.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c location.c -o location.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c replace.c -o replace.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c locks.c -o locks.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU="amd64" -Wall -Wstrict-prototypes -I/opt/softwares/jdk1.8.0_201/include -I/opt/softwares/jdk1.8.0_201/include/linux -c signals.c -o signals.o ar cr libservice.a arguments.o debug.o dso-dlfcn.o dso-dyld.o help.o home.o java.o location.o replace.o locks.o signals.o ranlib libservice.a gcc jsvc-unix.o libservice.a -ldl -lpthread -o ../jsvc make[1]: Leaving directory '/opt/softwares/apache-tomcat-8.5.57/bin/commons-daemon-1.2.2-native-src/unix/native'

将编译生成的jsvc拷贝到$CATALINA_BASE/bin下

[root@iZzm446eh1ux98Z unix]# ll
total 412
-rw-r--r-- 1 root root  15791 Sep  5 15:48 config.log
-rwxr-xr-x 1 root root    102 Sep  5 15:47 config.nice
-rwxr-xr-x 1 root root  24865 Sep  5 15:48 config.status
-rwxrwxr-x 1 1000 1000 147290 Sep 30  2019 configure
-rw-r--r-- 1 1000 1000   5055 Sep 30  2019 configure.in
-rw-r--r-- 1 1000 1000   2594 Sep 30  2019 INSTALL.txt
-rwxr-xr-x 1 root root 190560 Sep  5 15:48 jsvc
-rw-r--r-- 1 root root   1195 Sep  5 15:48 Makedefs
-rw-r--r-- 1 1000 1000   1081 Sep 30  2019 Makedefs.in
-rw-r--r-- 1 root root   1110 Sep  5 15:48 Makefile
-rw-r--r-- 1 1000 1000   1110 Sep 30  2019 Makefile.in
drwxr-xr-x 2 1000 1000     58 Sep  5 15:43 man
drwxr-xr-x 2 1000 1000   4096 Sep  5 15:48 native
drwxr-xr-x 2 1000 1000    158 Sep  5 15:43 support


[root@iZzm446eh1ux98Z unix]# cp jsvc /opt/softwares/apache-tomcat-8.5.57/bin/

将$CATALINA_BASE/bin下的daemon.sh拷贝到/etc/init.d/下

[root@iZzm446eh1ux98Z unix]# cd /opt/softwares/apache-tomcat-8.5.57/bin/
[root@iZzm446eh1ux98Z bin]# ll
total 1056
-rw-r----- 1 root root  36149 Jul  1 05:50 bootstrap.jar
-rw-r----- 1 root root  16608 Jul  1 05:50 catalina.bat
-rwxr-x--- 1 root root  25245 Jul  1 05:50 catalina.sh
-rw-r----- 1 root root   1664 Jul  1 05:53 catalina-tasks.xml
-rw-r----- 1 root root   2123 Jul  1 05:50 ciphers.bat
-rwxr-x--- 1 root root   1997 Jul  1 05:50 ciphers.sh
drwxr-xr-x 4 root root     95 Sep  5 15:43 commons-daemon-1.2.2-native-src
-rw-r----- 1 root root  25197 Jul  1 05:50 commons-daemon.jar
-rw-r----- 1 root root 206895 Jul  1 05:50 commons-daemon-native.tar.gz
-rw-r----- 1 root root   2040 Jul  1 05:50 configtest.bat
-rwxr-x--- 1 root root   1922 Jul  1 05:50 configtest.sh
-rwxr-x--- 1 root root   9100 Jul  1 05:50 daemon.sh
-rw-r----- 1 root root   2091 Jul  1 05:50 digest.bat
-rwxr-x--- 1 root root   1965 Jul  1 05:50 digest.sh
-rwxr-xr-x 1 root root 190560 Sep  5 15:49 jsvc
-rw-r----- 1 root root   3460 Jul  1 05:50 setclasspath.bat
-rwxr-x--- 1 root root   3708 Jul  1 05:50 setclasspath.sh
-rw-r----- 1 root root   2020 Jul  1 05:50 shutdown.bat
-rwxr-x--- 1 root root   1902 Jul  1 05:50 shutdown.sh
-rw-r----- 1 root root   2022 Jul  1 05:50 startup.bat
-rwxr-x--- 1 root root   1904 Jul  1 05:50 startup.sh
-rw-r----- 1 root root  51232 Jul  1 05:50 tomcat-juli.jar
-rw-r----- 1 root root 419572 Jul  1 05:50 tomcat-native.tar.gz
-rw-r----- 1 root root   4574 Jul  1 05:50 tool-wrapper.bat
-rwxr-x--- 1 root root   5540 Jul  1 05:50 tool-wrapper.sh
-rw-r----- 1 root root   2026 Jul  1 05:50 version.bat
-rwxr-x--- 1 root root   1908 Jul  1 05:50 version.sh
[root@iZzm446eh1ux98Z bin]# cp daemon.sh /etc/init.d/tomcat

设置环境变量

[root@iZzm446eh1ux98Z bin]# vim /etc/profile.d/catalina.sh
export CATALINA_HOME=/opt/softwares/apache-tomcat-8.5.57
export CATALINA_BASE=/opt/softwares/apache-tomcat-8.5.57
[root@iZzm446eh1ux98Z bin]# vim /etc/profile
export JAVA_HOME=/opt/softwares/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

修改/etc/init.d/tomcat

[root@iZzm446eh1ux98Z bin]# vim /etc/init.d/tomcat
#!/bin/sh

# chkconfig: 2345 25 85                                              #添加到头部,这是服务配置信息
# description: Tomcat daemon project
....
# -----------------------------------------------------------------------------
# Commons Daemon wrapper script.
# -----------------------------------------------------------------------------

JAVA_HOME=/opt/softwares/jdk1.8.0_201                                                 #配置环境变量
CATALINA_HOME=/opt/softwares/apache-tomcat-8.5.57
# resolve links - $0 may be a softlink

test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat   # 这里的tomcat改成tomcat启动用户,如果启动报错Invalid user name 'tomcat' specified,那么添加一下就可以了useradd -s /sbin/nologin -M tomcat

修改权限

[root@iZzm446eh1ux98Z bin]# chown -R tomcat.tomcat /opt/softwares/apache-tomcat-8.5.57/

添加开机自启动

chkconfig --add tomcat
chkconfig --list 

启动

[root@iZzm446eh1ux98Z bin]# service tomcat start
原文地址:https://www.cnblogs.com/zh-dream/p/13605029.html