XSwitch运维手册
数据备份
使用 inotify-tools 和 rsync 来监控和备份 XSwitch 的 storage 目录。
xsbak 备份脚本
脚本只要获取到 inotify 的 close_write 事件,就会触发 rsync 进行文件备份。
脚本停止运行期间,XSwitch 产生的录音及上传的数据,都将不会备份。
#!/bin/bash #------------------------------------------------------- #连接远程服务器采用密钥方式 #1、生成密钥 #ssh-keygen -t rsa # #2、推送密钥 #ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx # #3、确保远程服务器上面安装了rsync工具 #------------------------------------------------------- #远程备份主机IP REMOTE_IP=192.168.100.1 #连接的用户名 REMOTE_USER=root #远程服务器ssh端口 REMOTE_SSH_PORT=22 #远程备份服务器上的备份路径 REMOTE_BACKUP_PATH=/backup #rsync工作最忙的网络带宽占用为R_PROCESS * R_SPEED #rsync传输文件速度单位kB R_SPEED=10000 #rsync最大的并发数量 R_PROCESS=5 #检测工具安装 if [[ -z $(which inotifywait) ]] then if [[ -n $(which rpm) ]] then yum makecache yum install -y epel-release yum install -y inotify-tools rsync else apt update apt install -y inotify-tools rsync fi fi #获取XSwitch的storage目录 binds=$(docker inspect --format '{{ range .HostConfig.Binds }}{{ println . }}{{ end}}' xswitch) audio_file_path=$(for item in $binds;do echo $item|grep 'freeswitch/storage'|cut -d ':' -f 1;done) #创建控制队列 rm -f /tmp/fd1 mkfifo /tmp/fd1 exec 5<>/tmp/fd1 rm -f /tmp/fd1 for i in `seq $R_PROCESS` do echo >&5; done #监测音频文件生成并传输 sysctl fs.inotify.max_user_watches=524288 inotifywait -mrq $audio_file_path -e close_write --exclude="http_file_cache|rrd" --timefmt '%d/%m/%y/%H:%M' --format '%T %w %f'| while read DATE DIR FILE; do read -u5 { #可以在此增加处理,如转换音频 #添加备份信息 TIME_EXT=$(date +%Y%m%d)_$(date +%H%M)_ wavFile=$DIR$FILE FILEDIR=$(echo ${DIR#*storage/}) #文件传输到远程服务器 rsync -aq -e "ssh -p $REMOTE_SSH_PORT" \ --bwlimit=$R_SPEED \ --rsync-path="[ -d $REMOTE_BACKUP_PATH/$FILEDIR ] || mkdir -p $REMOTE_BACKUP_PATH/$FILEDIR &&rsync" \ ${wavFile} $REMOTE_USER"@"$REMOTE_IP":"$REMOTE_BACKUP_PATH/$FILEDIR$TIME_EXT$FILE 2>&1 | grep -v known | \ { read ok; [[ -z $ok ]] && echo "src: ${wavFile} -> remote: $REMOTE_BACKUP_PATH/$FILEDIR$TIME_EXT$FILE" || echo $ok; } echo "" >&5 } & done
使用 systemd 把脚本注册为后台服务
1、创建 service 文件
注意ExecStart=
它指向 xsbak 脚本所在位置,xsbak 脚本必须有可执行权限。
cat > /etc/systemd/system/xsbak.service << EOF [Unit] Description=XSwich data backup shell script After=network.target StartLimitIntervalSec=3 [Service] Type=simple Restart=always RestartSec=1 ExecStart=/opt/xsbak.sh [Install] WantedBy=multi-user.target EOF
2、启用 service
#刷新systemd systemctl daemon-reload #运行xsbak systemctl start xsbak #xsbak开机自启 systemctl enable xsbak #查看运行状态,注意观察日志 systemctl status xsbak