tkhtssm
@tkhtssm (tkht ssm)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

tomcatを起動したところ、「tomcat.pidが見つからない」というメッセージが表示される(tomcatは起動される)

解決したいこと

CentOS8にて、tomcatを起動したところ、
/usr/local/apache-tomcat-10.0.4/bin/catalina.sh: 行 503: /var/run/tomcat/tomcat.pid: そのようなファイルやディレクトリはありません
と表示されます。
この表示を消すにはどうすればよろしいでしょうか。
(または、この表示があっても問題ないでしょうか。)

発生している問題・エラー

[root@testhost ~]# /usr/local/apache-tomcat-10.0.4/bin/startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-10.0.4
Using CATALINA_HOME:   /usr/local/apache-tomcat-10.0.4
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-10.0.4/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-10.0.4/bin/bootstrap.jar:/usr/local/apache-tomcat-10.0.4/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Using CATALINA_PID:    /var/run/tomcat/tomcat.pid
/usr/local/apache-tomcat-10.0.4/bin/catalina.sh: 行 503: /var/run/tomcat/tomcat.pid: そのようなファイルやディレクトリはありません
Tomcat started.

・環境

・OS
 CentOS8
・java
 java 16 2021-03-16
・Apache Tomcat
 10.0.4
 ※http://当該サーバのIPアドレス:8080 にて、
  tomcatの画面(猫の画面)は無事出力されています。

・関連ファイル

・/usr/local/tomcat/bin/setenv.sh
CATALINA_PID="/var/run/tomcat/tomcat.pid"
・/usr/lib/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 10.0.4
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
RemainAfterExit=yes

PIDFile=/var/run/tomcat/tomcat.pid
PIDFile=/usr/local/tomcat/bin/tomcat.pid

EnvironmentFile=-/etc/sysconfig/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReStart=/usr/local/tomcat/bin/shutdown.sh;/usr/local/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

対応方法など、教えていただけると助かります。
よろしくお願いいたします。

0

2Answer

おそらく catalina.sh のなかで /var/run/tomcat/tomcat.pid を作ろうとしたときに、ディレクトリが存在しないためエラーになったのだと思います。

/var/run/tomcat/ というディレクトリが存在するか確認して、なければディレクトリを作成してください。

1Like

Comments

  1. @tkhtssm

    Questioner

    ご回答ありがとうございます。

    /var/run/tomcatを手順の中で作っているのですが、
    (chown tomcat:tomcat /var/run/tomcatも実施)
    再起動すると/var/run/tomcat が消えており、
    現象解決していません。。

    なぜ削除されるか
    →df より、
    /runがtmpfs にマウントしているため!?

    # df -H
    ファイルシス サイズ 使用 残り 使用% マウント位置
    (略)

    tmpfs 939M 9.9M 929M 2% /run

    また他に対応方法が分かりましたら教えていただけると幸いです。
  2. /usr/local/tomcat/bin/setenv.sh はご自分で変更されているんですかね?

    ここを CATALINA_PID="/var/run/tomcat.pid" にすれば大丈夫そうに思えますが。
  3. @tkhtssm

    Questioner

    /usr/local/tomcat/bin/setenv.sh は自分で作成しています。
    CATALINA_PID="/var/run/tomcat/tomcat.pid"
    (CATALINA_PID="/var/run/tomcat.pid" が正しいでしょうか)
  4. サーバ起動時にサーバのプロセスIDを書き込んでおくファイルなので、ディレクトリが存在して権限があって間違えて消されないような場所なら、どこでも大丈夫だと思います。
    (サーバを終了するときにこのファイルを読み込んで、終了させるプロセスを決定するために使います。そのため、終了コマンド実行時にも同じ環境変数が定義されている必要があります)

    そのため「絶対にここじゃないといけない」という場所はないと思います。

    検索すると /var/run/tomcat.pid にしている人はいるので、一般的な場所として使われる場所の一つだと思います。
  5. @tkhtssm

    Questioner

    少し調べ、以下を実施してみました。
    (参考サイト : https://server.etutsplus.com/centos-7-tmpfiles-d-deleted-outdate-files/ )

    /usr/lib/tmpfiles.d/ にtomcat.conf を作成し、
    d /var/run/tomcat 0770 root tomcat -
    を作成、/var/run/tomcat が削除されないことを期待し、
    /usr/local/apache-tomcat-10.0.4/bin/startup.shを実行したのですが、

    今度は
    Existing PID file found during start.
    Tomcat appears to still be running with PID 1200. Start aborted.
    If the following process is not a Tomcat process, remove the PID file and try again:
    UID PID PPID C STIME TTY TIME CMD
    tomcat 1200 1 1 16:06 ? 00:00:07 /usr/bin/java -Djava.util.lo

    と表示されました。
    PIDが残ったままでtomcat起動できないと言われているようです。
    (tomcatの画面(猫の画面)は無事出力。)
  6. Tomcat appears to still be running with PID 1200. Start aborted.

    翻訳すると

    TomcatはまだPID1200で実行されているようです。開始は中止されました。

    と言っているので、起動しようとしたものとは別に、すでに tomcat が起動していると言っています。
    既に動いている Tomcat のプロセスを終了させるか、マシンを再起動してから startup.sh を起動してみてください。
  7. @tkhtssm

    Questioner

    おそらく休日の中、何度も対応していただきありがとうございます。

    Tomcatのプロセスをkillした後にstartup.sh したときは現象解決
    ・マシンを再起動または停止・起動後に startup.sh したときは現象再現

    マシンを再起動(または停止)したときに、Tomcatのプロセスを終了できれば
    本件解決しそうですが、対応方法等分かりましたら教えていただけますでしょうか。
    (マシン停止前のプロセスIDとマシン起動後のプロセスIDが違うのも気になります。)
  8. プロセスIDは毎回変わっておかしくはありません。

    再起動後に再現するということは、再起動の延長でTomcatが起動する設定になっているのではないでしょうか?
    (そうなら無理に手動で起動しなくてもよいのでは?)
  9. @tkhtssm

    Questioner

    度々回答をありがとうございます。

    単体テストの項目で、
    ・【tomcatの起動確認】
     (作業項目)
     tomcatを再起動し、以下を実行する。
      /usr/local/apache-tomcat-10.0.4/bin/startup.sh | grep started

     (確認項目)
      Tomcat Started.の表記を確認

    という項目があり、これについて対応しております。

    「Tomcat Startedの出力があればいい。
     件のメッセージも出力されるが、
     マシン再起動によりTomcatが起動する設定(systemctl enable tomcatを実施)になっているので、
     件のメッセージが出力されても問題ない」
     という結論をしてもよろしいでしょうか。
  10. 外部の人間が判断できないですが、多分だめですよね。
    自動でTomcatを上げないようにすればいいと思います
    systemctl disable して見たらどうでしょうか
  11. 回答者のコメント(返信)は、自分の回答にしかできない(他の人の回答に返信できない)ので、こちらで。

    手順書では、自動起動にしてあるにもかかわらず、手動でも起動しようとしているってことですかね? 問題提起(手順書に矛盾がある)か、先ほどの案で強引にOKにするか、ですかね。
  12. @tkhtssm

    Questioner

    詳細設計書には、tomcatを自動起動するか手動起動するかの記載は無いです。
    (postgresqlやzabbix-agentも同様)

    単体テスト仕様書では、
     ●tomcatを再起動する。
      /usr/local/apache-tomcat-10.0.4/bin/startup.sh | grep started

    と記載があるのですが、正しくは、
     ●tomcatを再起動する。
      /usr/local/apache-tomcat-10.0.4/bin/shutdown.sh
      /usr/local/apache-tomcat-10.0.4/bin/startup.sh | grep started

    ではと思いました。

    [root@testhost ~]# /usr/local/apache-tomcat-10.0.4/bin/shutdown.sh
    Using CATALINA_BASE: /usr/local/apache-tomcat-10.0.4
    Using CATALINA_HOME: /usr/local/apache-tomcat-10.0.4
    Using CATALINA_TMPDIR: /usr/local/apache-tomcat-10.0.4/temp
    Using JRE_HOME: /usr
    Using CLASSPATH: /usr/local/apache-tomcat-10.0.4/bin/bootstrap.jar:/usr/local/apache-tomcat-10.0.4/bin/tomcat-juli.jar
    Using CATALINA_OPTS:
    Using CATALINA_PID: /var/run/tomcat/tomcat.pid
    NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
    Tomcat stopped.
    [root@testhost ~]# /usr/local/apache-tomcat-10.0.4/bin/startup.sh | grep started
    Tomcat started.
    [root@testhost ~]#

    「単体テスト内の手順に上記の修正が必要」とコメントしようと思います。

構築手順では、systemctl enable tomcat としているのですがいかがでしょうか。

0Like

Your answer might help someone💌