Ho uno script bash che funziona finché la macchina Linux è accesa. Lo avvio come mostrato di seguito:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Dopo che si avvia, posso vedere il comando tee nel mio output ps come mostrato di seguito:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
Ho una funzione che monitora la dimensione del registro che produce tee e uccide il comando tee quando il registro raggiunge una certa dimensione:
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
}
Con mia sorpresa, uccidere il comando tee uccide anche per istanza start.sh. Perchè è questo? Come posso terminare il comando tee ma far avviare il mio start.sh? Grazie.
tee -a
pertee
aprire il file in modalità append, altrimenti tee continuerà a scrivere nel file con lo stesso offset dopo averlo troncato (e su sistemi che non supportano file sparsi come su macOS che riallocare la sezione del file che porta a quella posizione, occupando il doppio dello spazio su disco).