Der & Hintergrund ist gut, mit Ausnahme von Programmen, die später eine Konsoleninteraktion erfordern (z. B. ein "apt -y update &", das schließlich in den STOP-Zustand wechselt, da der Benutzer viel später eine "Wirklich-Wirklich-Kraft" -Frage erhalten soll .... wenn niemand mehr zuschaut).
Um diese Lücke zu schließen und den Prozess darüber zu informieren, dass ein Terminal wirklich niemals verfügbar sein wird, füge ich einigen meiner Befehle ein <& - hinzu, und löse sie vollständig vom aktiven Terminal, um ihnen mitzuteilen, dass STDIN nicht mehr möglich ist. Stellen Sie sicher, dass / bin / bash Ihre Shell ist, wenn Sie das verwenden. Das Skript protokolliert weiterhin alle Fehler, die darauf zurückzuführen sind, dass kein Pseudoterminal verfügbar ist, für das eine Eingabeaufforderung gesendet werden kann.
Beispielsweise:
`./runme.sh &> runme.log <&- & disown`
ist meine ultimative Möglichkeit, mich von der aktuellen Terminalsitzung zu lösen. Sowohl STDOUT als auch STDERR werden in runme.log protokolliert. Es spielt keine Rolle, ob Ihre Konsole oder Shell früher beendet wird oder ob Sie sich bei einem anderen Konto abmelden (kein Terminalmüll von runme) PID-Beziehung wird entfernt.
UPDATE: Trotzdem hatte ich Probleme damit, ein Semaphor mit dem Namen des ursprünglichen Elternteils zu verknüpfen. Deshalb empfehle ich jetzt stattdessen:
at now <<< "(cmd1; cmd2; etc.) &> logfile.log"
Entfernen Sie natürlich das &>, wenn Sie die Ausgabe von CRON per E-Mail erhalten möchten, oder leiten Sie sie statt einer Datei an / dev / null weiter.
screen
) können Sie unter anderem länger laufende Prozesse "umbrechen". Sie können die Verbindung trennen, zur Shell zurückkehren, die Verbindung erneut herstellen und die Ausgabe des laufenden Prozesses anzeigen. Das erneute Anschließen kann sogar über ein anderes Terminal, SSH usw. erfolgen. Möglicherweise gibt es auch andere Programme, mit denen Sie solche Aufgaben ausführen können.