Mam skrypt bash, który działa, dopóki maszyna Linux jest włączona. Zaczynam tak, jak pokazano poniżej:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Po tym, jak się śmieje, widzę polecenie tee na moim wyjściu ps, jak pokazano poniżej:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
Mam funkcję, która monitoruje rozmiar logu tworzonego przez tee i zabija polecenie tee, gdy log osiągnie określony rozmiar:
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
}
Ku mojemu zaskoczeniu, zabicie polecenia tee zabija również przez instancję start.sh. Dlaczego to? Jak mogę zakończyć polecenie tee, ale mój start.sh nadal działa? Dzięki.
tee -a
dotee
otwarcia pliku w trybie dopisywania, w przeciwnym razie będzie tee kontynuować zapis do pliku w tym samym przesunięcie po jej (obciąć i na systemach, które nie obsługują plików rzadkich jak na MacOS, które będą ponownie przypisz sekcję pliku prowadzącą do tej pozycji, zajmując dwa razy więcej miejsca na dysku).