
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.out
eine 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
nohup
Sofern Sie den Wert von nicht in die Umgebung des Skripts exportiert haben (z. B. export nohup=/usr/bin/nohup
), wird dann $nohup
eine 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'.