#71 [解決済み]knowledge v1.12.0 へのDBアップデートができない

 [Public]
icon written by panoa at Apr 2, 2018 2:54 PM ( icon updated by panoa at Apr 3, 2018 12:03 PM <History> )
  Edit(Sign in)
  Stock
  Answer survey   Answer survey

  TOC

お世話になっております。

knowledge v1.11.0 から v1.12.0へのデータベースアップデートが出来ないのでアドバイスを頂きたいです。
knowledge v1.11.0 へのアップデートができないと類似した投稿ですが、向こうが解決済みとなっていたので、新しい投稿とさせていただきます。

具体的には、データベースアップデート画面のExecluteボタンを押下した際に、Executelogに以下のメッセージが出力されます。

start websocket.
Processing has been completed. [status]-99

アプリログ([knowledge_home]/logs/app.log)には以下のエラーが出ております。
下記以外のエラーは出ておりません。

ERROR 2018-04-02 14:07:09,898 AsyncJavaJob(50) error on job.
java.io.IOException: Cannot run program "java": error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at org.support.project.common.bat.BatJob.execute(BatJob.java:165)
        at org.support.project.common.bat.JavaJob.execute(JavaJob.java:166)
        at org.support.project.common.bat.AsyncJavaJob.run(AsyncJavaJob.java:44)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
        ... 4 more

knowledge v1.11.0 へのアップデートができないissue [java.io.IOExceptionのエラー]から、

  • javaの環境変数
  • パーミッションの問題

の疑いがあるかと思われます。
ただ、javaコマンドはどこからでも実行できる状態でありますし、パーミッションも怪しいところをすべて「777」にしても改善しませんでした。

バージョンアップ作業は今回が初めてです。
お手数ですが、確認すべきポイントについてアドバイスいただけないでしょうか。

nginx

nginx version: nginx/1.13.10

tomcat

Server version: Apache Tomcat/8.5.23
Server built:   Sep 28 2017 10:30:11 UTC
Server number:  8.5.23.0
OS Name:        Linux
OS Version:     3.10.0-693.11.1.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_152-b16
JVM Vendor:     Oracle Corporation

postgreSQL

psql (9.6.6)

 Attach Files     - [0]


 Comment
[Registration] Apr 2, 2018 11:11 PM [Koda]
icon

エラーの内容を見ると、 java のコマンドが実行できない状態にあるのだと思います。

javaコマンドはどこからでも実行できる状態でありますし、パーミッションも怪しいところをすべて「777」にしても改善しませんでした。

と書かれていますが、たぶんバージョンアッププロセスの実行ユーザでは、 java コマンドにパスが通っていないのだと思います。
(panoaさんが利用している、sshなどでログインしているシェルでは パスを通して有り、java コマンドは実行可能になっているのでは?)
詳しく書きますと、以下のようになるのでは?と推測します。

  • バージョンアップのプロセスは、Tomcatのプロセスとは別のプロセスで実行しています(重い処理になることが多いので)
  • このため、バージョンアップを実行すると、Tomcatのプロセスから「javaコマンド」を実行し、バージョンアップの処理を起動しています
  • この際、Tomcatユーザが別のjavaコマンドを実行しますが、このユーザは、javaコマンドにパスが通っていないのではないでしょうか?

上記の推測から、まずTomcat実行ユーザのパスの状況をご確認願います。


 Like! × 0  
Collapsed
[Registration] Apr 3, 2018 10:55 AM [panoa]
[Update] Apr 3, 2018 10:56 AM [panoa]
icon

処理内容についてのご説明およびアドバイスありがとうございます。
やはり、パスの問題になりますか。

(panoaさんが利用している、sshなどでログインしているシェルでは パスを通して有り、java コマンドは実行可能になっているのでは?)

これは私もすこし思ったので、追加済みユーザすべてにパスを通したりなどしてみたが改善せずだったので、藁すがで質問してみました。

上記の推測から、まずTomcat実行ユーザのパスの状況をご確認願います。

実行ユーザはrootなので、適当に

  • /etc/profile
  • /root/.bash_profile
    にJAVA_HOMEと、PATHにJAVA_HOME/binをexportするように書いていますが、それでも改善せずなので ? な状態です。

issue [java.io.IOExceptionのエラー]と同じく、しばらく放置していたら以下のエラーも出てきたので、同じ現象な気がします。
※惜しむらくは、上記Isuueが自然消滅的にCloseしていることです・・・

[CronListener(104)] Faild parse.
java.io.IOException: Cannot run program "java" (in directory "ログディレクトリ"):
:
[CronListener(168)] Failed send webhooks.
java.io.IOException: Cannot run program "java" (in directory "ログディレクトリ"):
:
[CronListener(231)] Failed to Notify
java.io.IOException: Cannot run program "java" (in directory "ログディレクトリ"):
:

 Like! × 0  
Collapsed
[Registration] Apr 3, 2018 12:02 PM [panoa]
icon

上記、解決いたしました。

結論としては、javaへのパス設定の方法が間違っておりました。申し訳ございません。

以下、詳細です。(お詳しい方には当たり前のことかと思います)

Centos7のため、Tomcat起動時には以下のコマンドを使用しています。

$ sudo systemctl start tomcat

裏ではシステム管理デーモン(systemd)が動きますが、systemdは環境変数を読み込みません。
なので、.bashrcやbash_profileに記載をしても無駄でした。

解決策としては、systemdに登録しているサービス起動ファイルに、EnvironmentFile設定を追記します。

$ sudo vi /etc/systemd/system/tomcat.service

---
[Service]
EnvironmentFile=/etc/sysconfig/tomcat

上で設定した「/etc/sysconfig/tomcat」にjavaのhomeを設定します。
※JAVA_HOMEは要らないかもしれません。

$ sudo vi /etc/sysconfig/tomcat

----
JAVA_HOME="/opt/java/latest/"
PATH="/opt/java/latest/bin"
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

これで正常に動作しました。
自分の無知ゆえに、お手数をおかけしました。ご対応ありがとうございますm( )m


 Like! × 0  
Collapsed



 Add Comment