脚本添加scp计划任务用以实现简单数据备份
#!/bin/bash ############################################################################### # This script is used to generate backup crontab tasks. Please ensure that # # the backup node can access remote resources without password via SSH. # # This script can also create a daily backup management crontab task, and # # do the daily backup management. # # The current running user is 'root', the backup directory is '/backup', # # the script location is '/root', and the backup running time is a random # # time point at 0-3 o'clock every day. You can modify these configurations # # if necessary. # # -- Programmed by WangXiaoLei on 17/02/2022 # ############################################################################### randNumHour=$(($RANDOM%3)) randNumMinute=$(($RANDOM%60)) user=root backupdir="/backup" scriptLocation="/root" if [[ ${1%*/} == ${1:0:-1} ]] then remoteHost=`echo ${1%*/} | awk -F '@|:' '{print $2}'` remoteHostPath=`echo ${1%*/} | awk -F ':' '{print $2}'` else remoteHost=`echo $1 | awk -F '@|:' '{print $2}'` remoteHostPath=`echo $1 | awk -F ':' '{print $2}'` fi if [[ $1 == *"@"*":"* ]] then remoteHostFolder=${remoteHostPath%*`echo $remoteHostPath | awk -F '/' '{print $NF}'`} if ping -c 1 $remoteHost >/dev/null then if ssh `echo $1 | awk -F ':' '{print $1}'` "ls -l $remoteHostPath" then if crontab -l | grep $remoteHost | grep $remoteHostPath then echo -e "\033[31mThis crontab already exists!\033[0m" fi while true do read -r -p "Are You Sure Add crontab? [Y/n] " input case $input in [yY][eE][sS]|[yY]) mkdir -p $backupdir/$remoteHost$remoteHostFolder echo $randNumMinute" "$randNumHour" * * * /usr/bin/scp -r $1 $backupdir/$remoteHost$remoteHostFolder" >> /var/spool/cron/$user chmod 600 /var/spool/cron/$user crontab /var/spool/cron/$user /bin/systemctl restart crond.service exit 1 ;; [nN][oO]|[nN]) exit 1 ;; *) echo "Invalid input..." ;; esac done else echo -e "\033[31m$1 backup resource can not be found!\033[0m" fi else echo -e "\033[31m$remoteHost is unreachable!\033[0m" fi elif [[ $1 == "SetDailyCleaning" ]] then if crontab -l | grep "DoDailyCleaning" then echo -e "\033[31mThis crontab already exists!\033[0m" fi while true do read -r -p "Are You Sure Add crontab? [Y/n] " input case $input in [yY][eE][sS]|[yY]) echo "50 23 * * * /bin/bash $scriptLocation/SetBackupCrond.sh DoDailyCleaning >/dev/null 2>&1" >> /var/spool/cron/$user chmod 600 /var/spool/cron/$user crontab /var/spool/cron/$user /bin/systemctl restart crond.service exit 1 ;; [nN][oO]|[nN]) exit 1 ;; *) echo "Invalid input..." ;; esac done elif [[ $1 == "DoDailyCleaning" ]] then if [ -d "$backupdir-2d" ] then rm -rf $backupdir-2d >/dev/null fi if [ -d "$backupdir-1d" ] then mv $backupdir-1d $backupdir-2d > /dev/null fi if [ -d "$backupdir" ] then mv $backupdir $backupdir-1d >/dev/null fi for line1 in `cat "/var/spool/cron/$user" | grep "/usr/bin/scp" | awk '{print $9}'`; do mkdir -p $line1 done else echo "Usage: ./SetBackupCrond.sh <User@Host:FilePath> or ./SetBackupCrond.sh SetDailyCleaning" fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通