Der Befehl „nohup“ kann die Ausgabe nicht in „nohup.out“ drucken.

Der Befehl „nohup“ kann die Ausgabe nicht in „nohup.out“ drucken.

Ich habe ein Bash-Skript geschrieben, um meine Jar-Datei in einer Ubuntu- oder Red Hat-Umgebung auszuführen. Hier ist mein Bash-Skript

#!/bin/bash
JAVA_HOME=/usr/lib/java/jdk1.8.0_131
$nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out


Mein Bash-Skript führt das von mir entwickelte JAR aus. Ich hoffe, die Ausgabe der JAR-Datei in nohup.outeine beliebige TXT-Datei ausdrucken zu können, damit ich Probleme leicht aufspüren kann. Aber es scheint, als würde nichts ausgedruckt, wenn ich das Skript ausführe. Es druckt die gesamte Ausgabe im Terminal aus. Aber wenn ich es nohup java -jar /home/chikin/Downloads/hardcoded.jar &direkt vom Terminal aus ausführe, kann es die gesamte JAR-Ausgabe in nohup.out drucken. Darf ich wissen, warum mein Skript nicht funktioniert? Mein Skript kann auch nicht jedes Mal ausgelöst werden, wenn ich meinen Ubuntu-Rechner neu starte. Ich habe viele Lösungen getestet, aber keine davon funktioniert gut.

Antwort1

nohupSofern Sie den Wert von nicht in die Umgebung des Skripts exportiert haben (z. B. export nohup=/usr/bin/nohup), wird dann $nohupeine leere Zeichenfolge ausgewertet - daher Ihr Befehl

$nohup java -jar /home/chikin/Downloads/hardcoded.jar

wird deutlich

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

wird also nohupüberhaupt nicht aufgerufen. Sie möchten wahrscheinlich

nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out

(ohne das $).


Wahrscheinlich ist es besser, die Ausgabedatei explizit zu machen:

nohup java -jar /home/chikin/Downloads/hardcoded.jar > nohup.out & tail -f nohup.out

da, wie in der Manpage angemerkt, die Regeln für die Ausgabedatei davon abhängen, ob die Standardausgabe ein Terminal ist oder nicht:

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'.

verwandte Informationen