需求
制作一个apollo自动录包脚本,类似行车记录仪方便出问题定位。
该脚本实现以下功能:
- 自动创建录制文件夹
- 创建以日期为命名的文件夹
- 录制bag包
- 全部录制或去除点云等数据量比较大的话题进行简单录制
- 设置bag包最大占用空间
- 每隔一分钟自动计算该文件夹占用空间,大于设定值则删除时间最久的文件
脚本
#!/usr/bin/env bash
# 包自动保存路径
bag_path="/apollo/data/bag/driving_record"
DOCKER_USER="${USER}"
RECORD_MODE="luce"
# 记录模式 全部/路测
RECORD_MODES=(
all
luce
)
function start()
{
# 判断是否有自动保存路径,无则自动创建
if [ ! -d "$bag_path" ]; then
mkdir $bag_path
fi
# 获取时间 年月日
date=`date +%Y%m%d`
curbag_dir="$bag_path/$date"
echo $curbag_dir
#创建当天文件夹
if [ ! -d "$curbag_dir" ]; then
mkdir $curbag_dir
sudo chmod 777 $curbag_dir
fi
#进入并录制
if [ "${RECORD_MODE}" == "${RECORD_MODES[0]}" ];then
# 录制全部
cd $curbag_dir && source /apollo/cyber/setup.bash && nohup cyber_recorder record -a &
fi
if [ "${RECORD_MODE}" == "${RECORD_MODES[1]}" ];then
# 去除点云
cd $curbag_dir && source /apollo/cyber/setup.bash && nohup cyber_recorder record -a -k /apollo/sensor/rshelios/Scan &
fi
#设置监控阈值
MAX_G=0
if [ $# -ge 1 ];then
let MAX_G=$1
else
MAX_G=300
fi
let MAX_SIZE=$(($MAX_G*1024*1024))
# 无显循环监控
while ((1))
do
# 计算bag_path占用空间
let SIZE=$(du -s $bag_path | awk -F " " '{print $1}')
let CUR_SIZE=$(($SIZE+1))
# 判断是否大于设定值
if [ $CUR_SIZE -gt $MAX_SIZE ];
then
# 计算大概多出多少bag包(一般全量为2G,普通的没计算)
EXCEED=$((($SIZE - $MAX_SIZE) / 1024 / 1024 / 2))
i=0
# 删除
while ((i < $EXCEED))
do
# 找到最早的文件夹
dir=$(ls $bag_path -tr | head -1 | xargs)
# 如果为空则跳出
if [ "${dir}" == ""];
then
break
fi
path="$bag_path/$dir"
# 找出年月日文件夹下最早的bag包
record=$(ls $path -tr | head -1 | xargs)
# 如果为空则删除该文件夹
if [ "${record}" == "" ];then
rm -rf $path
else
# 不为空则删除bag包
bag="$path/$record"
rm $bag
let i++
fi
done
else
echo "$SIZE < $MAX_SIZE"
fi
#延时60s
sleep 60
done
}
function stop() {
#杀死所有record
pkill -SIGINT -f record
}
case $1 in
start)
shift
start $@
;;
stop)
shift
stop $@
;;
*)
start $@
;;
esac