Systemctl が埋め込み Tomcat を起動できない

Systemctl が埋め込み Tomcat を起動できない

Tomcat 8.5 が組み込まれた Java プロジェクトがあります。CentOS 7.2 でサービスとして実行するために、sytemd に新しいサービスを追加しました。「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 ビット サーバー VM (25.152-b16 混合モード):

    「リスナーをアタッチ」#14 デーモン prio=9 os_prio=0 tid=0x00007fe804001000 nid=0x19a5 条件 [0x0000000000000000] を待機中
       java.lang.Thread.State: 実行可能

    "localhost-startStop-1" #13 デーモン prio=5 os_prio=0 tid=0x00007fe7e0001800 nid=0x190c 実行可能 [0x00007fe8204a8000]
       java.lang.Thread.State: 実行可能
        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: WAITING (パーキング)
        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: 実行可能
        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) で
        - ロックされています (sun.nio.ch.Util$3)
        - ロックされています (java.util.Collections$UnmodifiableSet)
        - ロックされています (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 実行可能 [0x0000000000000000]
       java.lang.Thread.State: 実行可能

    「C1 CompilerThread2」#8 デーモン prio=9 os_prio=0 tid=0x00007fe8480ff800 nid=0x1901 条件 [0x0000000000000000] を待機中
       java.lang.Thread.State: 実行可能

    「C2 CompilerThread1」#7 デーモン prio=9 os_prio=0 tid=0x00007fe8480fd800 nid=0x1900 条件 [0x0000000000000000] を待機中
       java.lang.Thread.State: 実行可能

    「C2 CompilerThread0」#6 デーモン prio=9 os_prio=0 tid=0x00007fe8480fb000 nid=0x18ff 条件 [0x0000000000000000] を待機中
       java.lang.Thread.State: 実行可能

    「シグナル ディスパッチャ」#5 デーモン prio=9 os_prio=0 tid=0x00007fe8480f9000 nid=0x18fe 実行可能 [0x0000000000000000]
       java.lang.Thread.State: 実行可能

    「代理ロッカー スレッド (同時 GC)」#4 デーモン prio=9 os_prio=0 tid=0x00007fe8480f7800 nid=0x18fd 条件 [0x0000000000000000] を待機中
       java.lang.Thread.State: 実行可能

    「ファイナライザー」#3 デーモン prio=8 os_prio=0 tid=0x00007fe8480c4000 nid=0x18fc in Object.wait() [0x00007fe821dfc000]
       java.lang.Thread.State: WAITING (オブジェクト モニター上)
        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 in Object.wait() [0x00007fe821efd000]
       java.lang.Thread.State: WAITING (オブジェクト モニター上)
        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: WAITING (パーキング)
        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 スレッド」 os_prio=0 tid=0x00007fe8480b7800 nid=0x18fa 実行可能

    「ギャングワーカー#0 (並列 GC スレッド)」 os_prio=0 tid=0x00007fe84801c800 nid=0x18f5 実行可能

    「ギャングワーカー#1 (並列 GC スレッド)」 os_prio=0 tid=0x00007fe84801e000 nid=0x18f6 実行可能

    「ギャングワーカー#2 (並列 GC スレッド)」 os_prio=0 tid=0x00007fe848020000 nid=0x18f7 実行可能

    「ギャングワーカー#3 (並列 GC スレッド)」 os_prio=0 tid=0x00007fe848022000 nid=0x18f8 実行可能

    「同時マークスイープ GC スレッド」 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/sh
      LIB=/テスト/アプリ/lib
      CONFIG_FILE_PATH=/test/app/config
      CP=.:$クラスパス
      ${LIB}/*.* 内の f の場合;
        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」コマンドの実行に違いはありますか?

関連情報