バックグラウンドプロセスのSTDINをリダイレクトする方法は?

バックグラウンドプロセスのSTDINをリダイレクトする方法は?

私のUbuntuにはバックグラウンドで動作するJavaアプリケーションがあります。 bashスクリプトを使って実行しましたが、次のようになります。

nohup java -jar app.jar &
exit 0

問題は、入力文字列を前景にインポートせずに、他の端末/セッションから自分のアプリケーションに書き込むことができることです。それはまるで

echo "mytext" > /appdir/in

スクリプトをどのように変更する必要がありますか?

答え1

メインディレクトリ

#!/bin/bash
set -e

if [ ! -p in ]; then
    mkfifo in
fi
tail -f in | java -jar app.jar

次の構文を使用してアプリケーションにコマンドを送信します。

echo "command" > /home/user/in

答え2

試してみてください:

mkfifo /appdir/in
nohup java -jar app.jar < /appdir/in &
exit 0

テストを受ける:

$ ./startapp.sh
$ printf "%s\n" "mytext" >> /appdir/in
$ cat nohup.out
mytext

$

ライフサイクルを管理するには、追加の制御機能を追加する必要があります。/アプリケーションディレクトリ/in名前付きパイプ。

関連情報