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