CentOS 7上的Tomcat 8不能作为服务启动(但是它是手动启动的.....)

时间:2019-01-01 09:56:38

标签: java tomcat centos7

我已经在CentOS VM(使用bento / centos-7)上安装了Tomcat(apache-tomcat-8.5.37)。

Tomcat已安装在

/opt/tomcat/apache-tomcat-8.5.37

并且Java 8已安装在

/usr/java/jre1.8.0_192-amd64

在安装Tomcat之前,我已经以这种方式创建了一个tomcat用户

sudo useradd tomcat
sudo passwd tomcat
sudo mkdir /opt/tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
su – tomcat

如果我尝试使用

手动启动Tomcat
/opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh

一切正常,我可以从网址中测试Tomcat广告及其示例

http://192.168.33.10:8080

(注意:192.168.33.10是我的虚拟机的IP ...)

我还可以使用

关闭Tomcat。
/opt/tomcat/apache-tomcat-8.5.37/bin/shutdown.sh

我想像服务一样启动Tomcat,所以我先停止了Tomcat,然后编辑了文件

/etc/systemd/system/tomcat.service

具有此内容

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/java/jre1.8.0_192-amd64
Environment=CATALINA_PID=/opt/tomcat/apache-tomcat-8.5.37/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/apache-tomcat-8.5.37/
Environment=CATALINA_BASE=/opt/tomcat/apache-tomcat-8.5.37/
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat
UMask=0007

[Install]
WantedBy=multi-user.target

然后

sudo systemctl daemon-reload

sudo systemctl start tomcat

Tomcat现在不响应调用URL

http://192.168.33.10:8080

的输出
sudo systemctl status tomcat

是关注

● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2019-01-01 09:34:46 UTC; 13min ago
  Process: 14438 ExecStop=/bin/kill -15 $MAINPID (code=exited, status=1/FAILURE)
  Process: 14425 ExecStart=/opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 14436 (code=exited, status=0/SUCCESS)

Jan 01 09:34:46 localhost.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...
Jan 01 09:34:46 localhost.localdomain startup.sh[14425]: Existing PID file found during start.
Jan 01 09:34:46 localhost.localdomain startup.sh[14425]: Removing/clearing stale PID file.
Jan 01 09:34:46 localhost.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
Jan 01 09:34:46 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1
Jan 01 09:34:46 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.
Jan 01 09:34:46 localhost.localdomain systemd[1]: tomcat.service failed.

的输出
journalctl -xe

是关注

Jan 01 09:34:46 localhost.localdomain sudo[14418]:   tomcat : TTY=pts/0 ; PWD=/opt/tomcat/apache-tomcat-8.5.37/temp ; USER=root ; COMMAND=/bin/systemctl start tomcat
Jan 01 09:34:46 localhost.localdomain polkitd[635]: Registered Authentication Agent for unix-process:14419:1135902 (system bus name :1.85 [/usr/bin/pkttyagent --notify-fd 5 --fallb
Jan 01 09:34:46 localhost.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...
-- Subject: Unit tomcat.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit tomcat.service has begun starting up.
Jan 01 09:34:46 localhost.localdomain startup.sh[14425]: Existing PID file found during start.
Jan 01 09:34:46 localhost.localdomain startup.sh[14425]: Removing/clearing stale PID file.
Jan 01 09:34:46 localhost.localdomain startup.sh[14425]: Tomcat started.
Jan 01 09:34:46 localhost.localdomain polkitd[635]: Unregistered Authentication Agent for unix-process:14419:1135902 (system bus name :1.85, object path /org/freedesktop/PolicyKit1
Jan 01 09:34:46 localhost.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
-- Subject: Unit tomcat.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit tomcat.service has finished starting up.
--
-- The start-up result is done.
Jan 01 09:34:46 localhost.localdomain kill[14438]: Usage:
Jan 01 09:34:46 localhost.localdomain kill[14438]: kill [options] <pid|name> [...]
Jan 01 09:34:46 localhost.localdomain kill[14438]: Options:
Jan 01 09:34:46 localhost.localdomain kill[14438]: -a, --all              do not restrict the name-to-pid conversion to processes
Jan 01 09:34:46 localhost.localdomain kill[14438]: with the same uid as the present process
Jan 01 09:34:46 localhost.localdomain kill[14438]: -s, --signal <sig>     send specified signal
Jan 01 09:34:46 localhost.localdomain kill[14438]: -q, --queue <sig>      use sigqueue(2) rather than kill(2)
Jan 01 09:34:46 localhost.localdomain kill[14438]: -p, --pid              print pids without signaling them
Jan 01 09:34:46 localhost.localdomain kill[14438]: -l, --list [=<signal>] list signal names, or convert one to a name
Jan 01 09:34:46 localhost.localdomain kill[14438]: -L, --table            list signal names and numbers
Jan 01 09:34:46 localhost.localdomain kill[14438]: -h, --help     display this help and exit
Jan 01 09:34:46 localhost.localdomain kill[14438]: -V, --version  output version information and exit
Jan 01 09:34:46 localhost.localdomain kill[14438]: For more details see kill(1).
Jan 01 09:34:46 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1
Jan 01 09:34:46 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.
Jan 01 09:34:46 localhost.localdomain systemd[1]: tomcat.service failed.
Jan 01 09:34:59 localhost.localdomain sudo[14451]:   tomcat : TTY=pts/0 ; PWD=/opt/tomcat/apache-tomcat-8.5.37/temp ; USER=root ; COMMAND=/bin/systemctl status tomcat
Jan 01 09:48:45 localhost.localdomain sudo[15115]:   tomcat : TTY=pts/0 ; PWD=/opt/tomcat/apache-tomcat-8.5.37/bin ; USER=root ; COMMAND=/bin/systemctl status tomcat

catalina.out的输出如下

01-Jan-2019 09:09:21.585 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
01-Jan-2019 09:09:21.602 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
01-Jan-2019 09:09:21.614 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 2829 ms
01-Jan-2019 09:09:21.697 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
01-Jan-2019 09:09:21.697 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.37
01-Jan-2019 09:09:21.738 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/ROOT]
01-Jan-2019 09:09:22.777 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/ROOT] has finished in [1,038] ms
01-Jan-2019 09:09:22.795 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/docs]
01-Jan-2019 09:09:22.847 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/docs] has finished in [70] ms
01-Jan-2019 09:09:22.847 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/examples]
01-Jan-2019 09:09:23.468 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/examples] has finished in [621] ms
01-Jan-2019 09:09:23.469 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/host-manager]
01-Jan-2019 09:09:23.522 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/host-manager] has finished in [54] ms
01-Jan-2019 09:09:23.522 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/manager]
01-Jan-2019 09:09:23.569 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/tomcat/apache-tomcat-8.5.37/webapps/manager] has finished in [47] ms
01-Jan-2019 09:09:23.592 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
01-Jan-2019 09:09:23.601 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
01-Jan-2019 09:09:23.604 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1990 ms
01-Jan-2019 09:12:38.830 INFO [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.
01-Jan-2019 09:12:38.831 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
01-Jan-2019 09:12:38.870 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
01-Jan-2019 09:12:38.878 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
01-Jan-2019 09:12:39.117 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
01-Jan-2019 09:12:39.123 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
01-Jan-2019 09:12:39.131 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
01-Jan-2019 09:12:39.137 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]

????

建议表示赞赏!

8 个答案:

答案 0 :(得分:3)

  

注意:从2019年10月起

  1. 我遵循了错误https://bz.apache.org/bugzilla/show_bug.cgi?id=63063,但仍然无法解决问题。
  2. 我做了很少的试错,并解决了问题。按照标准,它工作流畅且完全正常。如下所述,即使您温和地终止了tomcat服务或使用kill -9,然后使用systemctl启动了tomcat服务,它的工作方式也一样。

我正在使用 Ubuntu 16.04,tomcat 8.5.37,Java 1.8.0_222

我使用了以下 systemd 脚本,将其保留在以下位置:/etc/systemd/system/

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container for ShopWorx
After=syslog.target network.target

[Service]
Type=forking
WorkingDirectory=/usr/local/tomcat/bin

ExecStart=/bin/bash /usr/local/tomcat/bin/catalina.sh start
ExecStop=/bin/bash /usr/local/tomcat/bin/catalina.sh stop

User=emgda
Group=emgda

[Install]
WantedBy=multi-user.target

并依次运行以下命令

systemctl daemon-reload

systemctl start tomcat

ssytemctl status tomcat

以下是tomcat服务状态的输出。

● tomcat.service - Apache Tomcat Web Application Container for ShopWorx
   Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-10-09 14:52:08 IST; 1min 46s ago
  Process: 3713 ExecStart=/bin/bash /usr/local/tomcat/bin/catalina.sh start (code=exited, status=0/SUCCESS)
 Main PID: 3720 (bash)
   CGroup: /system.slice/tomcat.service
           ├─3720 /bin/bash /usr/local/tomcat/bin/catalina.sh start
           └─3722 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.

Oct 09 14:52:08 ubuntu systemd[1]: Starting Apache Tomcat Web Application Container ...
Oct 09 14:52:08 ubuntu bash[3713]: Tomcat started.
Oct 09 14:52:08 ubuntu systemd[1]: Started Apache Tomcat Web Application Container.
  

重要:必须注意WorkingDirectoryExecStartExecStop,它们的价值至关重要。

答案 1 :(得分:2)

我发现了相关的错误报告:

Bug 63063

Bug 63041

此错误将在下一版本中修复。

答案 2 :(得分:0)

一个常见问题,当您手动(使用自己的用户帐户)启动tomcat时,临时文件,日志等归您所有,而不是由守护程序用户(tomcat)拥有(根据引用的tomcat.service文件)。后续启动时,由于缺少权限,守护程序用户无法覆盖这些文件-这也可能会阻止正确记录这些问题。

修复这些权限(或更确切地说:文件所有权),然后重试。我的守护程序启动脚本通常在相关文件中使用chown,以确保在有人手动启动使用错误的用户帐户的情况下,我不会遇到这些问题。

答案 3 :(得分:0)

按照错误消息中的说明删除pid文件

在启动过程中找到了现有的PID文件。

/opt/tomcat/apache-tomcat-8.5.37/temp/tomcat.pid

答案 4 :(得分:0)

我已经解决了更改此行

ExecStop=/bin/kill -15 $MAINPID

ExecStop=sudo /bin/kill -15 $MAINPID

在我的/etc/systemd/system/tomcat.service文件中。

现在是它的新内容

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/java/jre1.8.0_192-amd64
Environment=CATALINA_PID=/opt/tomcat/apache-tomcat-8.5.37/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat/apache-tomcat-8.5.37/
Environment=CATALINA_BASE=/opt/tomcat/apache-tomcat-8.5.37/
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh
ExecStop=sudo /bin/kill -15 $MAINPID

User=tomcat
Group=tomcat
UMask=0007

[Install]
WantedBy=multi-user.target

现在tomcat服务以

开头
sudo systemctl start tomcat

和输出

sudo systemctl status tomcat

[vagrant@localhost system]$ sudo systemctl status tomcat
● tomcat.service - Apache Tomcat Web Application Container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: activating (auto-restart) since Tue 2019-01-08 20:28:25 UTC; 1s ago
  Process: 14447 ExecStart=/opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 14458 (code=exited, status=0/SUCCESS)

答案 5 :(得分:0)

有时候,您的Java堆内存将超过当前服务器内存。您可以在tomcat8的setenv.sh文件中进行设置,然后重新启动服务器。

在无法重新启动tomcat之后降级系统配置时,我遇到了同样的问题,因此我只调整了tomcat / bin / setenv.sh文件和/ etc / systemd / system /中的堆内存根据系统配置的tomcat.service文件,然后我重新启动了tomcat。现在一切正常。

答案 6 :(得分:0)

在旧的CentOS 6.10上,解决方案正在更改/etc/init.d/tomcat8

使用runuser而不是su或sudo进行更改

/bin/su $TOMCAT_USER -c $CATALINA_HOME/bin/startup.sh

/sbin/runuser -s /bin/sh $TOMCAT_USER $CATALINA_HOME/bin/startup.sh

答案 7 :(得分:0)

也许你可以试试这个:

[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/local/jdk1.8.0_251
Environment=LD_LIBRARY_PATH=/usr/local/apr/lib
Environment=LD_RUN_PATH=/usr/local/apr/lib
PIDFile=/usr/local/apache-tomcat-9.0.36/bin/tomcat_8080.pid
ExecStart=/usr/local/apache-tomcat-9.0.36/bin/startup.sh
ExecReload=/usr/local/apache-tomcat-9.0.36/bin/catalina.sh restart
ExecStop=/usr/local/apache-tomcat-9.0.36/bin/shutdown.sh
PrivateTmp=true

User=root
Group=root

[Install]
WantedBy=multi-user.target

指定 apr/lib

很重要