У меня есть проект Java со встроенным Tomcat 8.5. Я добавил новую службу в sytemd, чтобы запустить ее как службу в CentOS 7.2. Когда я использую "systemctl start app.service" для запуска сервера, программа остановится на
"Aug 16, 2018 5:54:13 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.5.32"
Я использовал команду «jstack» для проверки процесса, после чего получил следующую информацию:
2018-08-16 18:28:34 Полный дамп потока Java HotSpot(TM) 64-битной серверной виртуальной машины (смешанный режим 25.152-b16): "Присоединить прослушиватель" #14 демон prio=9 os_prio=0 tid=0x00007fe804001000 nid=0x19a5 ожидание по условию [0x0000000000000000] java.lang.Thread.State: RUNNABLE "localhost-startStop-1" #13 демон prio=5 os_prio=0 tid=0x00007fe7e0001800 nid=0x190c готов к запуску [0x00007fe8204a8000] java.lang.Thread.State: RUNNABLE в java.io.UnixFileSystem.getBooleanAttributes0 (собственный метод) в java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242) в java.io.File.isDirectory(File.java:849) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2011) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) в org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1963) в org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913) в org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153) в org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765) - заблокировано (org.apache.catalina.startup.ContextConfig) в org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299) в org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) в org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154) - заблокирован (org.apache.catalina.core.StandardContext) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - заблокирован (org.apache.catalina.core.StandardContext) в org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) в org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run(Thread.java:748) "Tomcat-startStop-1" #12 демон prio=5 os_prio=0 tid=0x00007fe8486d7000 nid=0x190b ожидание по условию [0x00007fe8205ad000] java.lang.Thread.State: ОЖИДАНИЕ (парковка) в sun.misc.Unsafe.park (собственный метод) - парковка для ожидания (java.util.concurrent.FutureTask) в java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) в java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) в java.util.concurrent.FutureTask.get(FutureTask.java:191) в org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - заблокирован (org.apache.catalina.core.StandardHost) в org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) - заблокирован (org.apache.catalina.core.StandardHost) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - заблокирован (org.apache.catalina.core.StandardHost) в org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) в org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run(Thread.java:748) "NioBlockingSelector.BlockPoller-1" #11 демон prio=5 os_prio=0 tid=0x00007fe8486c3800 nid=0x190a запуск [0x00007fe8206ae000] java.lang.Thread.State: RUNNABLE в sun.nio.ch.EPollArrayWrapper.epollWait(собственный метод) на sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) на sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) в sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - заблокирован (a sun.nio.ch.Util$3) - заблокировано (java.util.Collections$UnmodifiableSet) - заблокирован (a sun.nio.ch.EPollSelectorImpl) на sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) в org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298) "Сервисный поток" #9 демон prio=9 os_prio=0 tid=0x00007fe848102800 nid=0x1902 работоспособен [0x00000000000000000] java.lang.Thread.State: RUNNABLE "C1 CompilerThread2" #8 daemon prio=9 os_prio=0 tid=0x00007fe8480ff800 nid=0x1901 ожидание по условию [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread1" #7 daemon prio=9 os_prio=0 tid=0x00007fe8480fd800 nid=0x1900 ожидание по условию [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #6 демон prio=9 os_prio=0 tid=0x00007fe8480fb000 nid=0x18ff ожидание по условию [0x00000000000000000] java.lang.Thread.State: RUNNABLE "Диспетчер сигналов" #5 демон prio=9 os_prio=0 tid=0x00007fe8480f9000 nid=0x18fe запуск [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Поток суррогатной блокировки (конкурентный GC)" #4 демон prio=9 os_prio=0 tid=0x00007fe8480f7800 nid=0x18fd ожидание по условию [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Финализатор" #3 демон prio=8 os_prio=0 tid=0x00007fe8480c4000 nid=0x18fc в Object.wait() [0x00007fe821dfc000] java.lang.Thread.State: ОЖИДАНИЕ (на мониторе объекта) в java.lang.Object.wait (собственный метод) в java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - заблокирован (java.lang.ref.ReferenceQueue$Lock) в java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) в java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Обработчик ссылок" #2 демон prio=10 os_prio=0 tid=0x00007fe8480bf800 nid=0x18fb в Object.wait() [0x00007fe821efd000] java.lang.Thread.State: ОЖИДАНИЕ (на мониторе объекта) в java.lang.Object.wait (собственный метод) в java.lang.Object.wait(Object.java:502) в java.lang.ref.Reference.tryHandlePending(Reference.java:191) - заблокирован (java.lang.ref.Reference$Lock) в java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "main" #1 prio=5 os_prio=0 tid=0x00007fe84800b800 nid=0x18f4 ожидание по условию [0x00007fe8509c5000] java.lang.Thread.State: ОЖИДАНИЕ (парковка) в sun.misc.Unsafe.park (собственный метод) - парковка для ожидания (java.util.concurrent.FutureTask) в java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) в java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) в java.util.concurrent.FutureTask.get(FutureTask.java:191) в org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - заблокирован (org.apache.catalina.core.StandardEngine) в org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) - заблокирован (org.apache.catalina.core.StandardEngine) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - заблокирован (org.apache.catalina.core.StandardEngine) в org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) - заблокирован (org.apache.catalina.core.StandardEngine) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - заблокировано (org.apache.catalina.core.StandardService) в org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793) - заблокирован (java.lang.Object) в org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - заблокирован (org.apache.catalina.core.StandardServer) в org.apache.catalina.startup.Tomcat.start(Tomcat.java:367) в app.test.server.HttpServer.startServer(HttpServer.java:107) в app.test.ServerBootstrap.main(ServerBootstrap.java:27) "VM Thread" os_prio=0 tid=0x00007fe8480b7800 nid=0x18fa работоспособен "Рабочий процесс Gang#0 (параллельные потоки GC)" os_prio=0 tid=0x00007fe84801c800 nid=0x18f5 готов к запуску "Рабочий процесс Gang № 1 (параллельные потоки GC)" os_prio=0 tid=0x00007fe84801e000 nid=0x18f6 готов к запуску "Рабочий процесс Gang № 2 (параллельные потоки GC)" os_prio=0 tid=0x00007fe848020000 nid=0x18f7 готов к запуску "Рабочий процесс Gang № 3 (параллельные потоки GC)" os_prio=0 tid=0x00007fe848022000 nid=0x18f8 готов к запуску «Конкурентный поток маркировки-очистки мусора» os_prio=0 tid=0x00007fe848065000 nid=0x18f9 работоспособен «Поток периодических задач VM» os_prio=0 tid=0x00007fe848108000 nid=0x1903 ожидание по условию Глобальные ссылки JNI: 64
Я нашел, что есть
- заблокировано <0x00000006cb0240e0> (org.apache.catalina.startup.ContextConfig)
Мой служебный скрипт в "/etc/systemd/system" выглядит так:
[Единица] Описание=testapp После=сеть.цель [Услуга] Тип=разветвление ExecStart=/test/app/startup.sh [Установить] WantedBy=многопользовательский.целевой
Содержимое моего скрипта startup.sh следующее:
#!/bin/ш LIB=/тест/приложение/библиотека CONFIG_FILE_PATH=/test/app/config CP=.:$CLASSPATH для f в ${LIB}/*.*; сделать CP=${CP}:$f; сделанный CP=${CP}:${CONFIG_FILE_PATH}; экспортировать CLASSPATH=$CP nohup /usr/local/jdk1.7.0_80/bin/java -classpath $CLASSPATH app.test.ServerBootstrap ${CONFIG_FILE_PATH} >> test.out 2>&1 &
Когда я запускаю свой скрипт "startup.sh", проблем нет. Когда я использую команду "systemctl", программа останавливается, но процесс продолжает работать.
Как мне справиться с этой проблемой. Есть ли разница между запуском скрипта оболочки и команды "systemctl"?