相关说明
我们有时候考虑到安全问题,需要将切片同步到其他服务器保存,或者用作分发节点拿来分发,这里就说下详细操作。
同步操作
自动同步到其它服务器
教程可参考:点击查看,选择Minio
方式即可;也就是在其它服务器上安装Minio
服务端,用来接收同步的相关文件。
手动同步到其它服务器
提示:可参考下方手动同步拓展,间接实现自动同步。
首先同步前,先使用SSH
客户端登录到其它服务器,安装一下rsync
,使用命令:
#CentOS系统
yum install rsync -y
#Debian、Ubuntu系统
apt install rsync -y
再到其它服务器使用命令,下面2
种同步命令参考:
#仅同步
rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/home/express-ffmpeg/public/videos /home
#同步期间过滤指定后缀,也就是这些后缀的文件不会同步过来,且删除同步成功的文件
rsync -avu -e 'ssh -p 9999' --exclude={'*.m3u8','*.jpg','*.mp4','*.info','*.key','*.gif'} --remove-source-files root@1.2.3.4:/home/express-ffmpeg/public/videos /home
相关命令参数详解:
ssh -p 9999 后面为转码服务器ssh端口,也就是需要同步的服务器
--remove-source-files 同步期间,删除同步成功的文件
--exclude={} 同步期间排除指定后缀的文件,格式 *.后缀,多个后缀用英文逗号,隔开
1.2.3.4 为转码服务器ip,也就是需要同步的服务器ip
/home/express-ffmpeg/public/videos 为转码服务器需要同步的目录,默认为转码服务器切片目录public/videos
/home 为同步到其它服务器的存放目录
手动同步拓展
1、同步切片文件夹videos所有文件后,只删除切片文件,保留其它文件
首先只同步切片文件,过滤掉其它文件,并配置同步成功后删除切片,使用命令:
rsync -avu -e 'ssh -p 9999' --include='*/' --include='*.ts' --exclude='*' --remove-source-files root@1.2.3.4:/home/express-ffmpeg/public/videos /home
后面一个--include
为只同步的后缀,默认ts
切片,如果你设置过伪装,则改成*.png
,如果两者都有,则改成--include={'*.ts','*.png'}
。
接下来同步剩下的文件,但不删除,也就保留了转码服务器的这些文件,使用命令:
rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/home/express-ffmpeg/public/videos /home
2、强制将切片文件夹videos和同步后的videos文件夹全部文件变成一模一样
注意:此方法仅适用于同步的时候,没有删除任意切片等文件,如果你删除了转码服务器的切片文件,强制一样后,同步端切片也会被删除。
一般我们可能会在转码服务器里删除相关文件,但为了节省空间,需要将同步后的文件夹也删除相应的文件,这里可以使用命令:
rsync -avu -e 'ssh -p 9999' --delete root@1.2.3.4:/home/express-ffmpeg/public/videos /home
使用该命令前,一定要看一下上面的注意说明,切勿乱用。
3、如何在运行同步命令的时候免密码输入,适用于定时计划的自动同步
提示:我们提前配置好了命令后,直接加入定时计划任务,按时同步即可。
由于我们有时候需要定时同步文件,而定时不方便输入密码,这里就找了个比较简单的方法免密输入,配合sshpass
工具即可。
先使用SSH
客户端登录到其它服务器即同步文件存放端,安装一下sshpass
,使用命令:
#CentOS系统
yum install -y epel-release
yum install sshpass -y
#Debian、Ubuntu系统
apt install sshpass -y
再使用命令:
sshpass -p 'xxxxx' rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/opt/express-ffmpeg/public/videos /home
也就是在常用的同步命令之前加一句sshpass -p 'xxxxx'
代码即可,且xxxxx
为需要同步的服务器密码,此时运行就不需要输入密码了。
4、针对第3点,如何设置定时计划任务
如果有安装宝塔,则直接前往宝塔计划任务那块即可,任务类型选择shell
,脚本内容为同步命令。
如果你没有安装宝塔,则这里提供一个命令行,先安装crontab
定时工具,使用命令:
#CentOS系统
yum install crond -y
systemctl start crond
systemctl enable crond
#Debian、Ubuntu系统
apt-get install cron -y
再设置定时计划任务,使用命令:
crontab -l > crontab.bak
#0 1 * * *为每天1:00执行命令,后面为同步命令行
echo "0 1 * * * sshpass -p 'xxxxx' rsync -avu -e 'ssh -p 9999' root@1.2.3.4:/opt/express-ffmpeg/public/videos /home" >> crontab.bak
crontab crontab.bak
rm -rf crontab.bak
最后可在第二天检查同步是否设置成功即可。
相关定时任务时间设置参考:
43 21 * * * #21:43 执行
15 05 * * * #05:15 执行
0 17 * * * #17:00 执行
0 17 * * 1 #每周一的17:00 执行
0,10 17 * * 0,2,3 #每周日,周二,周三的17:00和17:10 执行
0-10 17 1 * * #毎月1日从17:00到7:10毎隔1分钟 执行
0 0 1,15 * 1 #毎月1日和15日和一日的0:00 执行
42 4 1 * * #毎月1日的4:42分 执行
0 21 * * 1-6 #周一到周六21:00 执行
0,10,20,30,40,50 * * * * #每隔10分 执行
*/10 * * * * #每隔10分 执行
* 1 * * * #从1:0到1:59每隔1分钟 执行
0 1 * * * #1:00 执行
0 */1 * * * #毎时0分每隔1小时 执行
0 * * * * #毎时0分 执行
2 8-20/3 * * * #8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * * #1日和15日的5:30 执行
5、同步太慢,如何多线程同步加快进度
此命令需要在转码服务器,也就是在被同步服务器上运行,使用命令:
#进入到程序切片目录
cd /home/express-ffmpeg/public/videos
#开始多线程同步
ls /home/express-ffmpeg/public/videos | xargs -n1 -P4 -I% sshpass -p 'xxxx' rsync -avu -e 'ssh -p 22' -Pa % root@1.2.3.4:/home/videos
注意sshpass -p 'xxxx' rsync -avu -e 'ssh -p 22'
为同步的参数,且为上面的方式3
免密同步,root@1.2.3.4:/home/videos
为需要同步到的服务器ip
和切片存放路径,必须多一个videos
。