前提・実現したいこと
初めて質問させていただきます。
現在Tomcatを使用してお客様のクラウド環境にてWebサーバーを運用しています。
最近になって日次で実施しているTomcatの停止処理にて定期的にエラーが発生するようになりその原因を調査しています。
調査は継続して実施しているのですが、依然はっきりとした原因が判明しておらずこちらに質問させていただきました。
発生している問題・エラーメッセージ
OSはRedHat7でSystemdとjsvcを用いてサービスの管理しており、毎日0時(cron使用)にバックアップ処理の為Tomcatを停止、起動しているのですが、数ヶ月前から停止処理の際にエラーを検知するようになりました。
この停止処理ではsystemctl stop tomcat.service
で停止処理を実行し、systemctl is-failed tomcat.service
で異常なく停止処理が実行されたかを確認しています。
こちらのsystemctl is-failed tomcat.service
の判定にてTomcatサービスがfailedになっており、jounalctl
で詳細を調べたところ終了ステータスが「255」で終了しているためfailedと判定されているようでした。
しかしfailedの判定は出ているのですが、Tomcat自体は停止できており、その後の起動処理は正常に終了している状況です。
以下jounalctl
で出力したTomcatの停止処理部分のメッセージです。
5月 20 18:40:27 localhost.localdomain systemd[1]: Stopping Tomcat... -- Subject: Unit tomcat.service has begun shutting down -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit tomcat.service has begun shutting down. 5月 20 18:40:27 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=255 5月 20 18:40:29 localhost.localdomain systemd[1]: Stopped Tomcat. -- Subject: Unit tomcat.service has finished shutting down -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- Unit tomcat.service has finished shutting down. 5月 20 18:40:29 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state. 5月 20 18:40:29 localhost.localdomain systemd[1]: tomcat.service failed.
該当のソースコード
以下、現在使用しているTomcatのsystemdの設定及び、jsvcの起動スクリプトの中身となります。
unit
1[Unit] 2Description=Tomcat 3After=network.target 4 5[Service] 6Type=forking 7PIDFile=/var/run/tomcat.pid 8User=root 9Group=root 10Environment="CATALINA_HOME=/usr/local/tomcat" 11Environment="CATALINA_BASE=/ap/tomcat" 12Environment="CATALINA_PID=/var/run/tomcat.pid" 13Environment="JAVA_HOME=/usr/java/latest" 14Environment="TOMCAT_USER=tomcat" 15EnvironmentFile=/ap/tomcat/bin/setenv.sh 16 17ExecStart=/usr/local/tomcat/bin/jsvc.sh start 18ExecStop=/usr/local/tomcat/bin/jsvc.sh stop 19ExecReload=/usr/local/tomcat/bin/jsvc.sh restart 20 21[Install] 22WantedBy=multi-user.target
bash
1#!/bin/sh 2 3start() { 4 /usr/local/tomcat/bin/jsvc \ 5 -umask 022 \ 6 -debug \ 7 ${CATALINA_OPTS} \ 8 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \ 9 -Djava.util.logging.config.file=${CATALINA_BASE}/conf/logging.properties \ 10 -cp ${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar \ 11 -Dcatalina.base=${CATALINA_BASE} \ 12 -Dcatalina.home=${CATALINA_HOME} \ 13 -Djava.endorsed.dirs=${CATALINA_HOME}/common/endorsed \ 14 -Djava.io.tmpdir=${CATALINA_BASE}/temp \ 15 -user ${TOMCAT_USER} \ 16 -home ${JAVA_HOME} \ 17 -outfile ${CATALINA_BASE}/logs/catalina.out \ 18 -pidfile ${CATALINA_PID} \ 19 org.apache.catalina.startup.Bootstrap 20} 21 22stop() { 23 /usr/local/tomcat/bin/jsvc \ 24 -stop \ 25 -pidfile ${CATALINA_PID} \ 26 org.apache.catalina.startup.Bootstrap 27} 28 29case "$1" in 30 start) 31 start 32 ;; 33 stop) 34 stop 35 ;; 36 restart) 37 stop 38 start 39 ;; 40 *) 41 echo $"Usage: jsvc {start|stop|restart}" 42 exit 1 43 ;; 44esac
試したこと
調査したところjsvcで指定したPIDファイルが読み込めない場合に終了ステータスが「255」となるようなので、開発の環境にて停止処理の前に実際にPIDファイルを削除し確認したところ、同様に終了ステータスが「255」となりサービスがfailedになることまでは確認できています。
複数回発生しているjournalctlのログでは、Tomcatのstop処理の途中に0anacronや0yum-cronが実行された場合に当エラーが発生しているようなので、これらのcronがPIDファイルに何かしら影響を及ぼすことで読込ができなくなっているのでは?と推測しているのですが実際にそうなのか確証が得られない状況です。
補足情報(FW/ツールのバージョンなど)
以下OS等の情報となります
- OS:RedHat 7
- Tomcat:5.5.36
- jsvc:1.0.10
あなたの回答
tips
プレビュー