我有一个bash脚本,只要Linux机器通电就可以运行。我按如下所示启动它:
( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) &
启动后,我可以在ps输出中看到tee命令,如下所示:
$ 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
以附加模式打开文件,否则,Tee将在截断文件后以相同的偏移量继续写入文件(以及在不支持稀疏文件的系统(如macOS)上)重新分配导致该位置的文件部分,占用磁盘空间的两倍。