
Eu tenho um projeto java com Tomcat 8.5 incorporado. Adicionei um novo serviço ao sytemd para executá-lo como um serviço no CentOS 7.2. Quando eu uso "systemctl start app.service" para iniciar o servidor, o programa irá parar em
"Aug 16, 2018 5:54:13 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.5.32"
Usei o comando "jstack" para verificar o processo, então obtive as informações abaixo:
16/08/2018 18:28:34 Despejo de thread completo Java HotSpot(TM) VM de servidor de 64 bits (modo misto 25.152-b16): "Anexar ouvinte" # 14 daemon prio = 9 os_prio = 0 tid = 0x00007fe804001000 nid = 0x19a5 aguardando na condição [0x000000000000000] java.lang.Thread.State: RUNNABLE "localhost-startStop-1" #13 daemon prio=5 os_prio=0 tid=0x00007fe7e0001800 nid=0x190c executável [0x00007fe8204a8000] java.lang.Thread.State: RUNNABLE em java.io.UnixFileSystem.getBooleanAttributes0 (método nativo) em java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242) em java.io.File.isDirectory(File.java:849) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2011) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:2020) em org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1963) em org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1913) em org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1153) em org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:765) - bloqueado (um org.apache.catalina.startup.ContextConfig) em org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299) em org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) em org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154) - bloqueado (um org.apache.catalina.core.StandardContext) em org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - bloqueado (um org.apache.catalina.core.StandardContext) em org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) em org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) em java.util.concurrent.FutureTask.run(FutureTask.java:266) em java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) em java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) em java.lang.Thread.run(Thread.java:748) "Tomcat-startStop-1" #12 daemon prio=5 os_prio=0 tid=0x00007fe8486d7000 nid=0x190b aguardando na condição [0x00007fe8205ad000] java.lang.Thread.State: ESPERANDO (estacionamento) em sun.misc.Unsafe.park (método nativo) - estacionamento para esperar (um java.util.concurrent.FutureTask) em java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) em java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) em java.util.concurrent.FutureTask.get(FutureTask.java:191) em org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - bloqueado (um org.apache.catalina.core.StandardHost) em org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) - bloqueado (um org.apache.catalina.core.StandardHost) em org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - bloqueado (um org.apache.catalina.core.StandardHost) em org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) em org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) em java.util.concurrent.FutureTask.run(FutureTask.java:266) em java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) em java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) em java.lang.Thread.run(Thread.java:748) "NioBlockingSelector.BlockPoller-1" #11 daemon prio = 5 os_prio = 0 tid = 0x00007fe8486c3800 nid = 0x190a executável [0x00007fe8206ae000] java.lang.Thread.State: RUNNABLE em sun.nio.ch.EPollArrayWrapper.epollWait (método nativo) em sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269) em sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93) em sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - bloqueado (a sun.nio.ch.Util$3) - bloqueado (um java.util.Collections$UnmodifiableSet) - bloqueado (um sun.nio.ch.EPollSelectorImpl) em sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) em org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298) "Thread de serviço" # 9 daemon prio = 9 os_prio = 0 tid = 0x00007fe848102800 nid = 0x1902 executável [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C1 CompilerThread2" #8 daemon prio=9 os_prio=0 tid=0x00007fe8480ff800 nid=0x1901 aguardando na condição [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread1" #7 daemon prio=9 os_prio=0 tid=0x00007fe8480fd800 nid=0x1900 aguardando na condição [0x0000000000000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" #6 daemon prio=9 os_prio=0 tid=0x00007fe8480fb000 nid=0x18ff aguardando na condição [0x0000000000000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" #5 daemon prio=9 os_prio=0 tid=0x00007fe8480f9000 nid=0x18fe executável [0x000000000000000] java.lang.Thread.State: RUNNABLE "Surrogate Locker Thread (GC simultâneo)" #4 daemon prio = 9 os_prio = 0 tid = 0x00007fe8480f7800 nid = 0x18fd aguardando na condição [0x000000000000000] java.lang.Thread.State: RUNNABLE "Finalizador" #3 daemon prio=8 os_prio=0 tid=0x00007fe8480c4000 nid=0x18fc em Object.wait() [0x00007fe821dfc000] java.lang.Thread.State: WAITING (no monitor de objeto) em java.lang.Object.wait (método nativo) em java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - bloqueado (um java.lang.ref.ReferenceQueue$Lock) em java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) em java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) "Manipulador de referência" #2 daemon prio=10 os_prio=0 tid=0x00007fe8480bf800 nid=0x18fb em Object.wait() [0x00007fe821efd000] java.lang.Thread.State: WAITING (no monitor de objeto) em java.lang.Object.wait (método nativo) em java.lang.Object.wait(Object.java:502) em java.lang.ref.Reference.tryHandlePending(Reference.java:191) - bloqueado (um java.lang.ref.Reference$Lock) em java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) "main" #1 prio=5 os_prio=0 tid=0x00007fe84800b800 nid=0x18f4 aguardando na condição [0x00007fe8509c5000] java.lang.Thread.State: ESPERANDO (estacionamento) em sun.misc.Unsafe.park (método nativo) - estacionamento para esperar (um java.util.concurrent.FutureTask) em java.util.concurrent.locks.LockSupport.park(LockSupport.java:175) em java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429) em java.util.concurrent.FutureTask.get(FutureTask.java:191) em org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) - bloqueado (um org.apache.catalina.core.StandardEngine) em org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) - bloqueado (um org.apache.catalina.core.StandardEngine) em org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - bloqueado (um org.apache.catalina.core.StandardEngine) em org.apache.catalina.core.StandardService.startInternal(StandardService.java:422) - bloqueado (um org.apache.catalina.core.StandardEngine) em org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - bloqueado (um org.apache.catalina.core.StandardService) em org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793) - bloqueado (um java.lang.Object) em org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) - bloqueado (um org.apache.catalina.core.StandardServer) emorg.apache.catalina.startup.Tomcat.start(Tomcat.java:367) em app.test.server.HttpServer.startServer(HttpServer.java:107) em app.test.ServerBootstrap.main(ServerBootstrap.java:27) "VM Thread" os_prio=0 tid=0x00007fe8480b7800 nid=0x18fa executável "Trabalhador de grupo#0 (threads de GC paralelos)" os_prio=0 tid=0x00007fe84801c800 nid=0x18f5 executável "Trabalhador de grupo#1 (threads de GC paralelos)" os_prio=0 tid=0x00007fe84801e000 nid=0x18f6 executável "Trabalhador de grupo#2 (threads de GC paralelos)" os_prio=0 tid=0x00007fe848020000 nid=0x18f7 executável "Trabalhador de grupo#3 (threads de GC paralelos)" os_prio=0 tid=0x00007fe848022000 nid=0x18f8 executável "Thread GC de varredura de marcação simultânea" os_prio = 0 tid = 0x00007fe848065000 nid = 0x18f9 executável "Thread de tarefa periódica da VM" os_prio=0 tid=0x00007fe848108000 nid=0x1903 aguardando condição Referências globais JNI: 64
Eu descobri que existe
- bloqueado <0x00000006cb0240e0> (um org.apache.catalina.startup.ContextConfig)
Meu script de serviço em "/etc/systemd/system" é:
[Unidade] Descrição = aplicativo de teste Depois=network.target [Serviço] Tipo = bifurcação ExecStart=/test/app/startup.sh [Instalar] WantedBy = multiusuário.target
O conteúdo do meu script startup.sh é:
#!/bin/sh LIB=/teste/app/lib CONFIG_FILE_PATH=/test/app/config CP=.:$CLASSPATH para f em ${LIB}/*.*; faça CP=${CP}:$f; feito CP=${CP}:${CONFIG_FILE_PATH}; exportar CLASSPATH=$CP nohup /usr/local/jdk1.7.0_80/bin/java -classpath $CLASSPATH app.test.ServerBootstrap ${CONFIG_FILE_PATH} >> test.out 2>&1 &
Quando executo meu script "startup.sh", não há problema. Quando eu uso o comando "systemctl", o programa será pausado, mas o processo continuará em execução.
Como posso lidar com esse problema. Existe alguma diferença entre executar o shell script e o comando “systemctl”?