代码之家  ›  专栏  ›  技术社区  ›  Cesare

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

  •  0
  • Cesare  · 技术社区  · 6 年前

    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
    

    如果我尝试使用

    /opt/tomcat/apache-tomcat-8.5.37/bin/startup.sh
    

    所有的工作都很好,我可以测试Tomcat广告的例子从网址

    http://192.168.33.10:8080
    

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

    我还可以使用

    /opt/tomcat/apache-tomcat-8.5.37/bin/shutdown.sh
    

    我想启动Tomcat like e服务,所以我停止了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
    

    输出卡塔琳娜,出去接下来是什么

    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"]
    

    ????

    感谢您的建议!!

    4 回复  |  直到 6 年前
        1
  •  3
  •   hooknc    4 年前

    注意 :截至2019年10月

    1. 我跟踪了窃听器 https://bz.apache.org/bugzilla/show_bug.cgi?id=63063 ,但仍未能解决问题。
    2. 我做了一些尝试和错误,解决了这个问题。它工作平稳,工作完全符合标准。即使您优雅地终止tomcat服务或使用 kill -9 systemctl 正如下面提到的,它就像魅力一样。

    我正在使用 Ubuntu 16.04、tomcat 8.5.37、Java 1.8.0Þ

    我在下面用过 脚本,保存在以下位置: /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
    
    systemctl status 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.
    

    重要 : WorkingDirectory , ExecStart , ExecStop

        2
  •  2
  •   GongDa Fan    6 年前

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

    Bug 63063

    Bug 63041

        3
  •  0
  •   Olaf Kock    6 年前

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

    修复这些权限(或者更确切地说:文件所有权),然后重试。我的守护程序启动脚本通常有一个 chown

        4
  •  0
  •   Antti    6 年前

    删除pid文件,如错误消息中所述

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

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

        5
  •  0
  •   Cesare    6 年前

    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)
    
        6
  •  0
  •   Birendra Rawat    6 年前

    有时,您的java堆内存可能会超过当前服务器内存。你可以把它放在你的房间里设置环境.sh文件,然后重新启动服务器。

    我面临着同样的问题,当我降级系统配置后,tomcat无法重新启动,所以我只是调整堆内存在tomcat/bin/设置环境.sh文件和/etc/systemd/system/tomcat.服务根据系统配置文件,然后重新启动tomcat。现在一切正常。

        7
  •  0
  •   fometeo    5 年前

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

    /sbin/runuser -s /bin/sh $TOMCAT_USER $CATALINA_HOME/bin/startup.sh
    
        8
  •  0
  •   RexusCao    4 年前

    也许你可以试试这个:

    [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