問題
- コンフィギュレーションを使用して外部プロセスでテキスト抽出機能を構成しています:
text.extraction.fork.process.enabled=truetext.extraction.fork.process.mime.types=application/x-tika-ooxml,application/pdf
- しかし、再インデックス化処理を実行しようとすると、外部プロセスの実行がうまくいかず、以下のエラーが投げられる:
2023-01-13 11:05:00.849 ERROR [default-13][FileImpl:483] com.liferay.petra.process.ProcessException: java.io.IOException: Broken pipe
com.liferay.petra.process.ProcessException: java.io.IOException: Broken pipe
at com.liferay.petra.process.local.LocalProcessExecutor.execute(LocalProcessExecutor.java:122)
at com.liferay.portal.util.FileImpl.lambda$extractText$0(FileImpl.java:441)
at com.liferay.registry.internal.RegistryImpl.callService(RegistryImpl.java:71)
at com.liferay.portal.util.FileImpl.extractText(FileImpl.java:437)
at com.liferay.portal.kernel.util.FileUtil.extractText(FileUtil.java:165)
at com.liferay.portal.kernel.search.DocumentImpl.addFile(DocumentImpl.java:159)
at com.liferay.document.library.internal.search.spi.model.index.contributor.DLFileEntryModelDocumentContributor.contribute(DLFileEntryModelDocumentContributor.java:114)
[ommited]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.io.IOException: Broken pipe
at java.base/java.io.FileOutputStream.writeBytes(Native Method)
at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354)
at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:127)
at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1873)
at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.write(ObjectOutputStream.java:1844)
at java.base/java.io.ObjectOutputStream.write(ObjectOutputStream.java:708)
at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1873)
at java.base/java.io.ObjectOutputStream$BlockDataOutputStream.writeByte(ObjectOutputStream.java:1911)
at java.base/java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1572)
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.liferay.petra.process.local.LocalProcessExecutor.execute(LocalProcessExecutor.java:97)
このエラーはどうすれば直るのでしょうか?
Environment
- Liferay DXP 7.3
解決策
- 外部プロセスのテキスト抽出機能は、Liferay ユーザーのシステム PATH で利用可能な
javaプロセスを実行します。 - 報告されたエラー
com.liferay.petra.process.ProcessException: java.io.IOException:Broken pipeシステムの PATH で利用可能な java バイナリとアプリケーションサーバーで使用される java バイナリが同じでない場合に発生することがあります。 - これを確認するためです:
- アプリケーションサーバーの実行に使用したのと同じシステムユーザーを使用して、シェルセッションを開く
-
javaを実行し、PATH環境に利用可能なjavaバイナリを配置する(Windows環境ではjavaを使用する)。 -
ps -ef | grep javaを実行し、アプリケーションサーバーが使用する Java のバイナリパスを取得します(Windows ではタスクマネージャーを使用します)。 - 両方のjavaのバイナリパスが同じであることを確認します。
- 一致しない場合は、システムのPATH設定を変更して、アプリケーションサーバーのものと同じJavaバイナリを指すようにするか、アプリケーションサーバーが間違ったJavaバイナリを使用している場合は、アプリケーションサーバーの設定を変更して修正します。