Ich habe ein Bash-Skript, das ausgeführt wird, solange der Linux-Computer eingeschaltet ist. Ich starte es wie unten gezeigt:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Nach dem Start kann ich den Befehl tee in meiner ps- Ausgabe wie folgt sehen:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
Ich habe eine Funktion, die die Größe des Protokolls überwacht, das tee erzeugt und den tee- Befehl beendet, wenn das Protokoll eine bestimmte Größe erreicht:
monitor_debug_log_size() {
## Monitor the file size of the debug log to make sure it does not get too big
while true; do
cecho r "CHECKING DEBUG LOG SIZE... "
debugLogSizeBytes=$(stat -c%s "/tmp/nginx/debug_log.log")
cecho r "DEBUG LOG SIZE: $debugLogSizeBytes"
if [ $((debugLogSizeBytes)) -gt 100000 ]; then
cecho r "DEBUG LOG HAS GROWN TO LARGE... "
sleep 3
#rm -rf /tmp/nginx/debug_log.log 1>/dev/null 2>/dev/null
kill -9 `pgrep -f tee`
fi
sleep 30
done
}
Zu meiner Überraschung wird das Beenden des tee- Befehls auch durch die start.sh-Instanz beendet. Warum ist das? Wie kann ich den tee- Befehl beenden, aber meine start.sh weiterhin ausführen? Vielen Dank.
tee -a
for verwendentee
, um die Datei im Anhänge-Modus zu öffnen. Andernfalls schreibt tee nach dem Abschneiden weiterhin mit demselben Versatz in die Datei (und auf Systemen, die keine Sparse-Dateien unterstützen, wie dies unter macOS der Fall ist) Ordnen Sie den Abschnitt der Datei, der zu dieser Position führt, neu zu (und nehmen Sie dabei doppelt so viel Speicherplatz ein).