Ich wusste nicht, ob dies zu SO gehört (da es sich um einen Programmierfehler handelt), aber ich dachte, ihr wisst mehr über die Feinheiten der verwendeten Software Bescheid (also könnte vielleicht sogar U & L in Betracht gezogen werden).
Hier ist das minimale Codeskript (siehe Änderungen für das vollständige Skript, es gibt einen Grund, warum ich es so mache);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Es wird versucht, einen Server im Hintergrund auszuführen, der in eine Protokolldatei ausgegeben wird.
Dann habe ich followdiese Logdatei benutzt less +F. Wenn Sie dies beenden möchten, müssen Sie ctrl+ drückenc bevor Sie drücken können Q.
Was passiert, ist, wenn ich ctrl+ cinnerhalb des lessBefehls (zum Stoppen tailing) den Server, mit nohupdem oben begonnen wurde, irgendwie töte ! Sonst ist nichts betroffen. Ich kann shift+f beginnen, das Protokoll erneut zu verfolgen (das keine neuen Informationen erhält, da der Server beendet wird), und wenn ich Qden Rest des Skripts drücke, wird es normal ausgeführt.
Wissen Sie, warum das passiert? Wie vermeide ich es / etwas anderes, das ich benutzen sollte?
PS:
Das Serverprogramm wartet möglicherweise auf ein ^CProblem. Kann ich etwas dagegen tun? Wenn ich einfach {SERVERCOMMAND}alleine renne (blockierend), kann ich ctrl+ drücken c, was es nicht sofort tötet. es druckt Received ^C signal, shutting down(und tötet sich dann selbst). Dies ist, was passiert, wenn ich ^Cin less(Ein Finale Received ^C signal, shutting downwird in das Protokoll geschrieben).
PPS
Ich habe eine Reihe von Dingen ausprobiert (keine hat funktioniert).
versuche das stdin vom script zu trennen indem du es änderst
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &Verwenden Sie
stty intr ^G, um den Interrupt-Befehl zu ersetzen, aber dann hat ctrl+ ggenau das getan, was^Cohnehin getan wurde (daher kann dies ein Problem mit meinem Terminal-Emulator sein;konsole)Platzieren des
nohup& / oder deslessLinie in Klammern (um daraus eine Unterschale zu machen)Ausführen des Skripts in
xtermanstelle vonkonsole
nohupVerhindert, dass der Prozess ein SIGHUPSignal empfängt , während STRG + C ein SIGINTSignal sendet . Deshalb hat nohupes nicht den erwarteten Effekt.
I think it is due to the handling within the database software, not on the shell. Wie würde ein Programm das machen? Wie könnte ich dann damit aufhören?