web-dev-qa-db-ja.com

nohupコマンドは出力をNohup.outに出力できません

UbuntuまたはRed Hat環境でjarファイルを実行するbashスクリプトを書きました。これが私のbashスクリプトです

#!/bin/bash
Java_HOME=/usr/lib/Java/jdk1.8.0_131
$Nohup Java -jar /home/chikin/Downloads/hardcoded.jar & tail -f Nohup.out


私のbashスクリプトは、私が開発したjarを実行します。jarファイルからの出力をNohup.outまたは任意のtxtファイルに出力したいので、問題を簡単に追跡できますが、スクリプトを実行しても何も印刷されないように、ターミナルのすべての出力が印刷されます。しかし、Nohup Java -jar /home/chikin/Downloads/hardcoded.jar &をターミナルから直接実行すると、すべてのjar出力をNohup.outに出力できます。スクリプトが機能しない理由を知っていますか?私のスクリプトは、ubuntuマシンを再起動するたびにトリガーすることもできません。多くのソリューションをテストしましたが、どれもうまく機能しません

1
attack

Nohupの値をスクリプトの環境(たとえば、export Nohup=/usr/bin/Nohup)にエクスポートしていない限り、$Nohupは空の文字列に評価されます-したがって、コマンド

$Nohup Java -jar /home/chikin/Downloads/hardcoded.jar

分かりやすくなる

Java -jar /home/chikin/Downloads/hardcoded.jar

したがって、Nohupはまったく呼び出されません。あなたはおそらく欲しい

Nohup Java -jar /home/chikin/Downloads/hardcoded.jar & tail -f Nohup.out

$なし)。


おそらく、出力ファイルを明示的にする方が良いでしょう:

Nohup Java -jar /home/chikin/Downloads/hardcoded.jar > Nohup.out & tail -f Nohup.out

マンページに記載されているように、出力ファイルの規則は標準出力が端末かどうかに依存するためです。

If standard output is a terminal, append output to 'Nohup.out' if  pos‐
sible,  '$HOME/Nohup.out'  otherwise.  If standard error is a terminal,
redirect it to standard output.  To save output  to  FILE,  use  'Nohup
COMMAND > FILE'.
1
steeldriver