linux服务器实现定时备份源码+数据库,并且保留最新3份shell脚本方法

这不是前两天数据丢失吗,长青最近又开了一台服务器专门用来储存网站源码+数据库
正好写一篇文件记录一下,也给大家一个例子看看

长青这里有两台服务器,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

如果您喜欢本站,可以收藏本网址,方便下次访问!

软件中的广告/弹窗/群号等信息切勿相信,注意鉴别,以免上当受骗!

本站软件全都是免费分享,仅供学习参考,严禁倒卖盈利!

(0)
上一篇 2023年4月3日 23:06
下一篇 2023年4月4日 20:19

相关推荐

发表回复

登录后才能评论

评论列表(1条)

  • 海棠网
    海棠网 2023年4月4日 20:05

    这里 scp的时候,因为长青两台服务器做了配对密钥,所以无需输入密码

分享本页
返回顶部