Sto utilizzando uno script bash che richiama più processi che devono essere avviati in un ordine particolare e alcune azioni devono essere completate (quindi stampano determinati messaggi per i registri) prima che il successivo possa essere avviato. Lo script bash ha il seguente codice che funziona davvero bene per la maggior parte dei casi:Ottimizzazione dello script Bash per l'attesa di una stringa specifica nei file di registro
tail -Fn +1 "$log_file" | while read line; do
if echo "$line" | grep -qEi "$search_text"; then
echo "[INFO] $process_name process started up successfully"
pkill -9 -P $$ tail
return 0
elif echo "$line" | grep -qEi '^error\b'; then
echo "[INFO] ERROR or Exception is thrown listed below. $process_name process startup aborted"
echo " ($line) "
echo "[INFO] Please check $process_name process log file=$log_file for problems"
pkill -9 -P $$ tail
return 1
fi
done
Tuttavia, quando abbiamo fissato i processi per stampare la registrazione in modalità debug, stampano tanto di registrazione che questo script non può tenere il passo, ed è richiede circa 15 minuti dopo il completamento del processo per il recupero dello script bash. C'è un modo per ottimizzarlo, come cambiare 'mentre leggi linea' a 'mentre leggi 100 righe', o qualcosa del genere?
questo ha funzionato brillantemente, grazie! – Matt
A volte funzionava, ma non altri (era sospeso) - alcune ricerche su SO mostrano che devo anche aggiungere il buffer di riga (grep --line-buffered -qEi "$ search_text |^error \ b") per garantire che l'output di grep viene inviato alla riga di lettura non appena viene trovato, invece di essere perso nel buffer interno di grep – Matt
Oops wait, penso che in realtà ho fatto un boo-boo lì. Dovrebbe essere solo 'grep -Ei', perché' grep -qEi' ** farà cadere ** le linee che corrispondono effettivamente. Argh! (Come mai questo ha funzionato per te è alquanto al di fuori di me;) –