Upload Video To the BaiduDisk In China - TheCrypt0/yi-hack-v4 GitHub Wiki
先上传到服务器 在由服务器上传到百度云
先scp 上传到服务器,再 bypy上传
步骤:
小蚁摄像机所在服务器准备工作
scp需要秘钥 先生成秘钥 ,这里使用的ssh客户端是嵌入式专用的 dropbear, 使用它来生成秘钥 dropbearkey
设置主目录
HOME=/mnt/HD_a2/root
mkdir -p $HOME
mkdir ~/.ssh
cd ~/.ssh
dropbearkey -t rsa -f key
dropbearkey -f key -y | head -n2 | tail -n1 >key.pub
然后拷贝公钥到服务器
ssh -i /mnt/HD_a2/root/.ssh/key [email protected]
然后就可以无秘钥了
上传小蚁视频到阿里云服务器
位于/tmp/sd/record/
下面待拷贝的文件的文件结构
2020Y10M05D11H
1.mp4
2.mp4
任务队列
30 * * * * script/file_upload.sh
注意这里需要自行启动crond任务,脚本里面的不生效
script/file_upload.sh
内容
脚本
#!/bin/sh
echo 'start'
DATE=`date +%Y_%m_%d_%H`
dic=`find /tmp/sd/record/* -name '20*H' -mmin +60 -mmin -120`
#dic='/tmp/sd/record/2020Y10M12D14H'
for file in ${dic} //去掉空行
#dicname=`echo $file|awk -F '\/' '{print $5}'`
do
echo 11
echo ${file}
res=`scp -P 22 -i ~/.ssh/id_rsa -r $file [email protected]:/root/yi-test$file`
if [ -z $res ]
then
echo $file >> ~/upload_log/${DATE}_upload.log
fi
done
scp是全量上传。 因为scp重复递归拷贝一个文件夹的时候如果之前已经拷贝过了,那么就会在原来的文件夹下面重新创建一个文件夹然后继续递归拷贝,类似于
- 2020Y10M05D11H
-2020Y10M05D11H
1.mp4
2.mp4
3.mp4
1.mp4
2.mp4
,为了避免这样,需要选择已经稳定了不需要增加视频的文件夹
观察下面的文件结构
drwxr-xr-x 2 root root 32768 Oct 5 04:00 2020Y10M05D11H
drwxr-xr-x 2 root root 32768 Oct 5 05:00 2020Y10M05D12H
drwxr-xr-x 2 root root 32768 Oct 5 06:00 2020Y10M05D13H
drwxr-xr-x 2 root root 32768 Oct 5 06:48 2020Y10M05D14H
drwxr-xr-x 2 root root 32768 Oct 5 07:57 2020Y10M05D15H
drwxr-xr-x 2 root root 32768 Oct 5 08:52 2020Y10M05D16H
drwxr-xr-x 2 root root 32768 Oct 5 10:00 2020Y10M05D17H
drwxr-xr-x 2 root root 32768 Oct 5 11:00 2020Y10M05D18H
drwxr-xr-x 2 root root 32768 Oct 5 12:00 2020Y10M05D19H
可以观察出来,不能拷贝最新的文件夹,因为这样会重复拷贝,可以拷贝前1个小时到2h的文件夹,因为已经稳定了,摄像机不会再往里面写入视频了, 计划任务每隔一个小时执行一次 这样每次拷贝的时间区间都是间隔1个小时 比如下面这样:
待拷贝的视频获取区间 任务执行时间
10:30-11:30 12:30
11:30-12:30 13:30
....
这样拷贝的时候都是稳定的了 这样就实现了把新的视频拷贝到阿里云了
阿里云服务器上传到百度云
上传需要解决的问题是 阿里云磁盘大小有限 ,需要删除已经上传过上百度云的文件。
所以需要定期上传 定期删除 文件。
借助bypy python 插件可以上传到百度云
先初始化,可以网上查询。
任务队列
每小时的50分钟市话开启上传任务 ,直接调用即可。bypy是增量上传,自己会对比hash值,skip过重复文件
50 * * * * /usr/bin/python /usr/local/bin/bypy upload /root/yi-test/tmp/sd/record/ record/ > /dev/null 2>&1
注意这里 直接运行
bypy upload /root/yi-test/tmp/sd/record/ record/ > /dev/null 2>&1
是不会执行的 因为需要写全路径
可以通过service crond status
查看任务执行详情
或者通过https://tool.lu/crontab/
查看任务执行时间
需要删除已经上传过的文件 ,也是计划任务 每隔3个小时的20分钟时候执行rm-rf
即可。
20 */3 * * * python /me/algo-esp/task/upload.py delete