nohup: Ignoriere die Eingabe und leite stderr auf stdout um

19

Ich starte meine Anwendung im Hintergrund unter Verwendung nohupder folgenden Befehle:

root@phx5qa01c:/bezook# nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out &
[1] 30781
root@phx5qa01c:/bezook# nohup: ignoring input and redirecting stderr to stdout

Aber jedes Mal, wenn ich diese Nachricht sehe -

nohup: ignoring input and redirecting stderr to stdout

Wird es ein Problem geben, wenn ich diese Nachricht sehe? Was bedeutet es und wie kann ich es vermeiden?

Arsenal
quelle
2
Haben Sie versucht:nohup java -jar blaa bla >/tmp/test.out 2>&1 &
Rahul Patil
anstelle von /tmp/test.outkann ich verwenden exhibitor.out. Tut mir leid, dass ich dumme Fragen gestellt habe, da mir diese Dinge ziemlich neu sind.
Arsenal
ja .. du kannst verwenden .. das ist nur std error / output datei. aber was ist der Status nach dem Hinzufügen 2>&1?
Rahul Patil

Antworten:

20

Um sicherzustellen, dass Ihre Anwendung von ihrem Terminal getrennt ist, damit sie die Vordergrundbefehle nicht beeinträchtigt und nach dem Abmelden weiter ausgeführt wird, stellen Sie nohupsicher, dass weder stdin noch stdout noch stderr ein terminalartiges Gerät sind. In der Dokumentation wird beschrieben, welche Aktionen ausgeführt werden:

Wenn es sich bei der Standardausgabe um ein Terminal handelt, werden alle vom angegebenen Dienstprogramm in die Standardausgabe geschriebenen Ausgaben an das Ende der Datei nohup.out im aktuellen Verzeichnis angehängt. Wenn nohup.out nicht erstellt oder zum Anhängen geöffnet werden kann, wird die Ausgabe an das Ende der Datei nohup.out in dem von der Umgebungsvariablen HOME angegebenen Verzeichnis angehängt. Wenn keine der Dateien erstellt oder zum Anhängen geöffnet werden kann, wird das Dienstprogramm nicht aufgerufen.

Wenn es sich bei dem Standardfehler um ein Terminal handelt, werden alle Ausgaben, die vom angegebenen Dienstprogramm in den Standardfehler geschrieben wurden, an denselben Dateideskriptor wie die Standardausgabe umgeleitet.

Sie haben stdout bei der Eingabe > exhibitor.outin der Befehlszeile in eine Datei umgeleitet . Wenn Sie damit einverstanden sind, dass das stderr Ihrer Anwendung auf dieselbe Datei wie das stdout geleitet wird, müssen Sie nichts weiter tun. Oder Sie können stderr in eine andere Datei umleiten, indem Sie ein Argument wie hinzufügen 2> exhibitor.err. (Dank eines unbekannten Benutzers - in meinen Benachrichtigungen wurde kein Name angezeigt -, der die Aufnahme dieser Alternative vorgeschlagen hat.)

Mark Plotnick
quelle
2
Es ist auch nützlich , um die Eingabe zu schließen fd manuell wie folgt: </dev/null; Linux erledigt dies automatisch, aber wenn es nicht manuell erledigt wird, wird in der Ausgabe von nohup immer noch eine Zeile nohup: ignoring input
angezeigt
17

Sie können die Meldung entfernen, wenn Sie den Standardfehler auf die Standardausgabe umleiten:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1 &
Shargors
quelle
4

In meiner Situation leite ich stdout und stderr um, aber es wird auch Folgendes in der Protokolldatei angezeigt:

nohup: ignoring input

Um diese Warnung zu entfernen, müssen Sie stdin wie folgt umleiten:

nohup java -jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname phx5qa01c.phx.qa.host.com > exhibitor.out 2>&1  </dev/null &

Ich wusste, diese Antwort ist definitiv zu spät für Sie, aber vielleicht würde es anderen helfen.

Styshoo
quelle