这不是前两天数据丢失吗,长青最近又开了一台服务器专门用来储存网站源码+数据库
正好写一篇文件记录一下,也给大家一个例子看看
长青这里有两台服务器,A和B,A是运行网站的,B是用来存储数据的
首先呢,现在A服务器把定时备份的数据库和源码每隔1小时发送到B服务器的备份目录中
脚本如下
#!/bin/bash
while true
do
yuanma=$(ls /www/backup/site/ | tail -1)
sql=$(ls /www/backup/database/ | tail -1)
scp /www/backup/site/"$yuanma" ip:/root/haitangw.cc_bak/yuanma/
scp /www/backup/database/"$sql" ip:/root/haitangw.cc_bak/sql/
sleep 1h
done
首先使用ls命令列出指定目录下的所有文件然后,通过tail命令选择最新的一个文件进行复制。最后,scp命令用于将该文件从本地主机发送到远程主机的根目录中。在这个例子中,我们使用了变量yuanma来存储最新文件的文件名,以便在scp命令中使用。sleep命令用于休眠一段时间,单位为小时,因此在每次循环结束后等待1小时,然后重复同样的复制过程。
接下来就是编写B服务器中定时保留最新3份文件的脚本
#!/bin/bash
while true
do
# 获取目录下所有log文件,按照修改时间排序
num1=($(ls -t /root/haitangw.cc_bak/yuanma/))
num2=($(ls -t /root/haitangw.cc_bak/sql/))
# 计算需要删除的文件数量
yuanma=$((${#num1[@]}-3))
sql=$((${#num2[@]}-3))
# 删除旧文件
if [[ $yuanma -gt 0 ]]; then
for (( i=0; i<$yuanma; i++ ))
do
rm "${num1[$i]}"
done
fi
# 删除旧文件
if [[ $sql -gt 0 ]]; then
for (( i=0; i<$sql; i++ ))
do
rm "${num2[$i]}"
done
fi
sleep 1h
done
在每个循环中,使用ls命令列出指定目录下所有的文件,并按照修改时间从新到旧排序。然后,通过计算需要删除的文件数量(即文件总数减去要保留的文件数),对旧文件进行删除。根据这个计算结果,使用一个for循环来遍历列表,删除前面的文件。
最后,使用sleep命令等待一小时,然后重复同样的操作。请注意,如果没有足够的旧文件需要删除,for循环将不会被执行。
上面用的while+sleep做得定时,大家启动的时候可以加个&符号后台运行
但是也有缺点,这种容易挂掉,大家可以换成crontab定时任务比较好
发布者:海棠网
文章网址:https://www.haitangw.cc/240.html
如果您喜欢本站,可以收藏本网址,方便下次访问!
软件中的广告/弹窗/群号等信息切勿相信,注意鉴别,以免上当受骗!
本站软件全都是免费分享,仅供学习参考,严禁倒卖盈利!
评论列表(1条)
这里 scp的时候,因为长青两台服务器做了配对密钥,所以无需输入密码