Starten eines Bash-Hintergrundprozesses unter OS X

3

Ich verwende eine Modifikation von Paul Biggars LaTeX-Build-System .

Der Kern dieses Systems ist nur ein Bash-Skript, das eine Endlosschleife ausführt. Die Frage ist, wie führe ich dieses Skript aus?

Im Moment starte ich es einfach, indem ich es im Terminal aufrufe:

$ ./build-it.sh report

Hierbei gibt es jedoch zwei Probleme:

  1. Es überfüllt das Terminal mit irrelevanten Ausgaben. Umleiten der Standardausgabe / Fehlerströme nach /dev/null hilft nicht Eigentlich, jede Linie Das im Skript ausgeführte wird ebenfalls in die Konsole geschrieben. Ist das überhaupt normal?
  2. Nach einiger Zeit (etwa 30 Minuten, würde ich sagen) wird das Skript mit einem Fehler beendet ("Cputime-Limit überschritten").

Das erste Problem könnte wahrscheinlich mit gelöst werden nohup und Schließen des Terminalfensters. Damit bleibt aber noch das zweite Problem. Ich bin auch der Meinung, dass dies keine "saubere" Lösung ist, da ich es vorziehen würde, das Skript normal im Hintergrund auszuführen und seine Standardausgabe zu verhindern (und im Übrigen nicht Fehlermeldungen).

Gibt es keinen geeigneten Weg, dies zu tun?

Konrad Rudolph
quelle
Siehe meine bearbeitete Antwort.
Dennis Williamson

Antworten:

2

Wenn Sie das Skript als Antwort verwenden Hier , dann kannst du entferne das set -x Das ist für das Debuggen.

Wenn Sie die umleiten stderr Stattdessen sollte die Debugging-Ausgabe des Skripts unterdrückt werden, es werden jedoch auch alle Fehlermeldungen unterdrückt.

Bearbeiten:

Es gibt auch eine ulimit -t 10 Zeile in diesem Skript. Das zu entfernen wird wahrscheinlich helfen.

Dennis Williamson
quelle
Das ulimit -t 10 im Das Skript muss bleiben - und es sollte sich nicht auf das Skript selbst auswirken. Andernfalls wird das Skript nach nur 10 Sekunden beendet.
Konrad Rudolph
1

Versuchen:

ulimit -t unlimited

zum Einstellen des Zeitlimits und

man bash

für mehr optionen von ulimit Bash eingebauter Befehl

mouviciel
quelle
Leider funktioniert das auch nicht: Ich habe verwendet (ulimit -t unlimited; ./build-it.sh report) aber das Skript stoppt nach einer Weile trotzdem.
Konrad Rudolph
0

Sie können aufrufen $ ./build-it.sh report & exit Das wird das erste Problem lösen.

Was das zweite betrifft, hat es möglicherweise mehr mit dem eigentlichen Skript zu tun.

Damien Varron
quelle
Ich bin nicht sicher, ob ich folgen kann. Das CPU-Zeitlimit hat nichts mit dem Skript zu tun. Dies gilt für alle Skripts. Ich möchte das CPU-Zeitlimit ausschalten für dieses spezielle Skript .
Konrad Rudolph