Назад | Перейти на главную страницу

ubuntu18.04 tomcat9 не запускает приложение при запуске через systemd

Прежде всего: я не эксперт по Tomcat, так что, пожалуйста, потерпите меня.

В настоящее время я столкнулся с проблемой при перезагрузке вышеупомянутого сервера. Приложение tomcat недоступно (404 не найдено) при автоматическом запуске.

Как только я останавливаю Tomcat через systemd и запускаю его вручную через "/usr/share/tomcat9/bin/catalina.sh", настроенное приложение (из server.xml) становится доступным.

 ./catalina.sh start
Using CATALINA_BASE:   /var/lib/tomcat9
Using CATALINA_HOME:   /usr/share/tomcat9
Using CATALINA_TMPDIR: /var/lib/tomcat9/temp
Using JRE_HOME:        /usr/lib/jvm/java-12-oracle
Using CLASSPATH:       /usr/share/tomcat9/bin/bootstrap.jar:/usr/share/tomcat9/bin/tomcat-juli.jar

некоторые выдержки из /etc/tomcat9/server.xml

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               Server=" " />
....


      <Host name="host-live"  appBase="webapps/host-live"
            unpackWARs="true" autoDeploy="true">
        <Alias>some.domain.com</Alias>
        <Context path="" docBase="/var/lib/tomcat9/webapps/host-live" />

        <Valve className="org.apache.catalina.valves.RemoteIpValve"  remoteIpHeader="x-forwarded-for"  />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="some.domain.com_access" suffix=".txt"
               pattern="%t %{x-forwarded-for}i %a %m %U %r %b %s %D %I %{X-AUSERNAME}o %{User-Agent}i" resolveHosts="false" />

      </Host>

Моя цель - запустить его и сделать доступным автоматически во время загрузки :)

Поэтому я попытался изменить файл модуля systemd. Я изменил его на следующее:

# Current Configuration
Environment="CATALINA_HOME=/usr/share/tomcat9"
Environment="CATALINA_BASE=/var/lib/tomcat9"
Environment="CATALINA_TMPDIR=/tmp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
EnvironmentFile=-/etc/default/tomcat9

# My changes:

# old values:
#ExecStart=/bin/sh /usr/libexec/tomcat9/tomcat-start.sh

# replaced with
ExecStart=/usr/share/tomcat9/bin/startup.sh
ExecStop=/usr/share/tomcat9/bin//shutdown.sh

РЕДАКТИРОВАТЬ:

Я исправил некоторые проблемы с разрешениями для файлов журнала tomcat. Но все равно приложение не обнаруживает ошибку 404.

Похоже, Tomcat успешно развертывает приложение при запуске с помощью systemd, но оно все еще недоступно. Ошибка 404 все еще появляется по запросу http: //subdomain.domain.tld/myapp/MyAppServer

Самое забавное: приложение мгновенно становится доступным на клонированном сервере (локальный хост-файл отредактирован). Я не понимаю.

Mar 24 13:20:00 server rsyslogd: file '/var/log/tomcat9/catalina.out': open error: Permission denied [v8.32.0 try http://www.rsyslog.com/e/2433 ]
Mar 24 13:20:03 server tomcat9[848]: Match [Server/Service/Engine/Host/Valve] failed to set property [resolveHosts] to [false]
Mar 24 13:20:03 server tomcat9[848]: Match [Server/Service/Engine/Host/Valve] failed to set property [resolveHosts] to [false]
Mar 24 13:20:03 server tomcat9[848]: Server version name:   Apache Tomcat/9.0.16 (Ubuntu)
Mar 24 13:20:03 server tomcat9[848]: Server built:          Sep 11 2019 19:47:51 UTC
Mar 24 13:20:03 server tomcat9[848]: Server version number: 9.0.16.0
Mar 24 13:20:03 server tomcat9[848]: OS Name:               Linux
Mar 24 13:20:03 server tomcat9[848]: OS Version:            4.15.0-1063-aws
Mar 24 13:20:03 server tomcat9[848]: Architecture:          amd64
Mar 24 13:20:03 server tomcat9[848]: Java Home:             /usr/lib/jvm/java-12-oracle
Mar 24 13:20:03 server tomcat9[848]: JVM Version:           12.0.1+12
Mar 24 13:20:03 server tomcat9[848]: JVM Vendor:            Oracle Corporation
Mar 24 13:20:03 server tomcat9[848]: CATALINA_BASE:         /var/lib/tomcat9
Mar 24 13:20:03 server tomcat9[848]: CATALINA_HOME:         /usr/share/tomcat9
Mar 24 13:20:03 server tomcat9[848]: Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
Mar 24 13:20:03 server tomcat9[848]: Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
Mar 24 13:20:03 server tomcat9[848]: Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djava.awt.headless=true
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -XX:+UseG1GC
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Xms1024M
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Xmx6144M
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Dignore.endorsed.dirs=
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Dcatalina.base=/var/lib/tomcat9
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Dcatalina.home=/usr/share/tomcat9
Mar 24 13:20:03 server tomcat9[848]: Command line argument: -Djava.io.tmpdir=/tmp
Mar 24 13:20:03 server tomcat9[848]: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
Mar 24 13:20:03 server tomcat9[848]: Initializing ProtocolHandler ["http-nio-8080"]
Mar 24 13:20:03 server tomcat9[848]: Server initialization in [1,490] milliseconds
Mar 24 13:20:03 server tomcat9[848]: Starting service [Catalina]
Mar 24 13:20:03 server tomcat9[848]: Starting Servlet engine: [Apache Tomcat/9.0.16 (Ubuntu)]
Mar 24 13:20:05 server tomcat9[848]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Mar 24 13:20:37 server tomcat9[848]: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [31,362] milliseconds.
Mar 24 13:20:37 server tomcat9[848]: Deploying web application directory [/var/lib/tomcat9/webapps/my-app-test/my-app]
Mar 24 13:20:38 server tomcat9[848]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Mar 24 13:20:38 server tomcat9[848]: Deployment of web application directory [/var/lib/tomcat9/webapps/my-app-test/my-app] has finished in [1,029] ms
Mar 24 13:20:39 server tomcat9[848]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Mar 24 13:20:39 server tomcat9[848]: Deploying web application directory [/var/lib/tomcat9/webapps/my-app-live/my-app]
Mar 24 13:20:40 server tomcat9[848]: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Mar 24 13:20:40 server tomcat9[848]: Deployment of web application directory [/var/lib/tomcat9/webapps/my-app-live/my-app] has finished in [1,106] ms
Mar 24 13:20:40 server tomcat9[848]: Starting ProtocolHandler ["http-nio-8080"]
Mar 24 13:20:40 server tomcat9[848]: Server startup in [36,550] milliseconds
Mar 24 13:22:04 server tomcat9[848]: Pausing ProtocolHandler ["http-nio-8080"]
Mar 24 13:22:04 server tomcat9[848]: Stopping service [Catalina]
Mar 24 13:22:04 server tomcat9[848]: Stopping ProtocolHandler ["http-nio-8080"]
Mar 24 13:22:04 server tomcat9[848]: Destroying ProtocolHandler ["http-nio-8080"]

С уважением,

Марк

Поскольку мое приложение, похоже, работает должным образом при запуске с нового сервера из образа, я проверил порт, который tomcat прослушивал (tcp 8080), как было предложено. Я видел, как tomcat выдает ошибку 404 на порте 8080, и сначала смог воспроизвести проблему с тестовым сервером.

Затем я проверил разрешения развернутых приложений внутри каталога webapps и обнаружил, что группа владельцев является root: root

Поэтому я установил разрешения с помощью следующих команд:

chown -R tomcat:tomcat /var/lib/tomcat9/webapps/
find  /var/lib/tomcat9/webapps/ -type d -exec chmod 2775 {} +
find /var/lib/tomcat9/webapps/ -type f -exec chmod 0664 {} +
chmod -R g+w /var/lib/tomcat9/webapps/
chmod -R g+s /var/lib/tomcat9/webapps/
usermod -a -G tomcat MYDEPLOYMENTUSERS

Это заставило веб-приложение работать должным образом при запуске с помощью systemd.

Большое спасибо за ваши предложения. Оставаться здоровым.