У мене є скрипт bash, який працює до тих пір, поки працює машина Linux. Я запускаю його, як показано нижче:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
Після запуску я можу побачити команду tee в моєму PS- висновку, як показано нижче:
$ ps | grep tee
418 root 0:02 tee /tmp/nginx/debug_log.log
3557 root 0:00 grep tee
У мене є функція, яка контролює розмір журналу, який виробляє tee, і вбиває команду tee, коли журнал досягає певного розміру:
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
}
На мій подив, вбивство команди tee також вбиває екземпляр start.sh. Чому це? Як я можу закінчити команду tee, але продовжувати запускати мій start.sh? Спасибі.
tee -a
дляtee
відкриття файлу в режимі додавання, інакше трійник буде продовжувати записувати у файл з тим же зрушенням після того, як ви врізаєте його (і в системах, які не підтримують розріджені файли, як на macOS, які будуть перерозподіліть розділ файлу, що веде до цього положення, зайнявши вдвічі більше місця на диску).