Das ist was ich laufe:
alexandma@ALEXANDMA-1-MBP ./command.sh &
[2] 30374
alexandma@ALEXANDMA-1-MBP
[2] + suspended (tty output) ./command.sh
Ich möchte nicht, dass es angehalten wird, ich möchte, dass es im Hintergrund weiterläuft. Ich werde ein paar davon in einer Schleife ausführen, also brauche ich etwas, das so funktioniert.
Wie kann ich es am Laufen halten?
bash
background-process
job-control
Matt Alexander
quelle
quelle
stdout
undstderr
Sie können sie einfach umleiten, um zu/dev/null
mögen./cmd.sh &> /dev/null &
Antworten:
Es stoppt aus dem angegebenen Grund: Es versucht, auf tty auszugeben. Sie können versuchen , die Ausgabe zu umleiten , wenn
./command.sh
Träger , die oder den Befehl in einem Lauftmux
oderscreen
Fenster von seiner eigenen. Z.Bund zeigen Sie dann die Liste der Fenster
tmux list-windows
an,tmux
mit denen erstellt und an die angehängt wurdetmux attach
.Auf diese Weise wartet das Programm immer noch auf die Eingabe / Ausgabe. Sie können jedoch problemlos Eingaben vornehmen, sobald Sie das entsprechende Fenster aufrufen, und die Ausgabe wird nur ohne Aktivität erfasst.
quelle
nohup
tmux
das nicht nötig istHinzufügen eines Details zu Anthons Erklärung:
Es ist nicht immer so, dass ein Schreibhintergrundprozess gestoppt wird. Dies hängt von der Terminaleinstellung ab
tostop
.kann verwendet werden, um diese Einstellung umzuschalten. Also , wenn Sie einen Hintergrundprozess zu schreiben , um „ein anderer Prozess des“ Terminal wollen , dann können Sie es am Laufen zu halten , aber nicht brauchen
tmux
,screen
oder ähnliches.quelle
Der einfachste Weg, dies zu tun, besteht darin, den Befehl wie folgt auszuführen:
Ich füge das nohup hinzu, falls Sie eine SH-Variable (keine CSH-Variable) verwenden und Ihre Sitzung beenden würden.
quelle
stty
Lösung .stty
es nicht funktioniertzsh
?stty
und der Hülle. Ich habe gerade diese beiden Lösungen ausprobiert undnohup
für mich gearbeitet.Installieren
screen
.Sobald Sie den Bildschirm installiert haben. Führen Sie es aus:
# screen
(Sie haben einen Begrüßungsbildschirm, wenn Sie es zum ersten Mal starten) Führen Sie Ihren Befehl aus:command.sh
Drücken Sie Ctrl+ aund dann d.
Dadurch wird der auf dem Server gestartete Bildschirm getrennt und Ihr Befehl ausgeführt.
Geben Sie Folgendes ein, um zu diesem Bildschirm zurückzukehren:
screen -r
quelle
Möglicherweise wird dieser Fehler angezeigt, wenn Ihre Shell zsh ist und das Skript aufruft
sudo
und Sie keine gültigen zwischengespeicherten Anmeldeinformationen haben (Sie haben sudo zuvor nicht ausgeführt oder die vorherigen Anmeldeinformationen sind abgelaufen) odersu
wenn Sie ein Kennwort eingeben müssen.Wenn Sie die Ausgabe nicht wie in anderen Antworten erwähnt
&
beibehalten müssen (z. B. das Ausführen Ihres Skripts ohne tmux oder screen), finden Sie hier einige mögliche Lösungen:tty_tickets
oder stellen Sie dentimestamp_type
zuglobal
Ihrer sudoers - Datei (so dass Sie nicht Ihr Passwort in allen Terminals eingeben müssen) und / oder erhöhen den Werttimestamp_timeout
(dies einige gravierende Auswirkungen auf die Sicherheit hat).sudo
vor dem Ausführen des Skripts einen einfachen Befehl mit aus , damit sudo die in Ihrem Skript gefundenen Anmeldeinformationen zwischengespeichert hat.quelle