J'ai un script bash qui s'exécute tant que la machine Linux est sous tension. Je le démarre comme indiqué ci-dessous:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Après son lancement, je peux voir la commande tee dans ma sortie ps comme indiqué ci-dessous:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
J'ai une fonction qui surveille la taille du journal produit par tee et tue la commande tee lorsque le journal atteint une certaine taille:
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
}
À ma grande surprise, tuer la commande tee tue également par l'instance start.sh. Pourquoi est-ce? Comment puis-je terminer la commande tee mais que mon start.sh continue de s'exécuter? Merci.
tee -a
pourtee
ouvrir le fichier en mode ajout, sinon, tee continuera à écrire dans le fichier avec le même décalage après l'avoir tronqué (et sur les systèmes qui ne prennent pas en charge les fichiers clairsemés comme sur macOS qui réallouer la section du fichier menant à cette position, en prenant deux fois plus d'espace disque).