本文包括使用Bash脚本来备份多个Linux远程系统上的配置文件。在Linux系统上执行任何活动之前,最好备份配置文件。如果几天后要重新启动服务器,则可以使用此脚本。如果您真的很担心配置文件的备份,建议每月至少使用一次此脚本。如果出现问题,可以根据错误消息比较配置文件,以使系统恢复正常。本文包含三个bash脚本,每个shell脚本均用于特定目的,您可以根据自己的要求选择一种。Linux中的所有内容都是文件,如果在配置文件中进行了一些错误的更改,将导致关联的服务崩溃。因此,最好备份配置文件,并且您不必担心磁盘使用情况,因为这不会占用太多空间。提醒:脚本当中的路径和名称请注意更改为自己的。
这个脚本做什么? 该脚本备份特定的配置文件,将它们移动到另一台服务器,最后删除远程计算机上的备份。 该脚本分为六个部分,详细信息如下: 第1部分:备份常规配置文件。 第2部分:如果服务器是物理的,则备份一个wwn/wwpn号码。 第3部分:如果系统具有oracle用户帐户,则备份与oracle相关的文件。 第4部分:创建备份配置文件的tar存档。 第5部分:将tar归档文件复制到其他服务器。 第6部分:删除远程系统上的配置文件备份。 系统详细信息如下: 服务器A:本地系统/JUMP系统(local.2daygeek.com) 服务器B:远程系统1(CentOS6.2daygeek.com) 服务器C:远程系统2(CentOS7.2daygeek.com)
1、Bash脚本一:备份远程服务器上的配置文件 此示例中包括两个脚本,它们使您可以将重要的配置文件从一台服务器备份到另一台服务器(即从远程服务器到本地服务器)。 例如,如果要将重要的配置文件从“服务器B”备份到“服务器A”,使用以下脚本。 这是一个真正的bash脚本,用于备份远程服务器上的配置文件: # vi /home/daygeek/shell-script/config-file.sh #!/bin/bash mkdir /tmp/conf-bk-$(date +%Y%m%d) cd /tmp/conf-bk-$(date +%Y%m%d) For General Configuration Files hostname > hostname.out uname -a > uname.out uptime > uptime.out cat /etc/hosts > hosts.out /bin/df -h>df-h.out pvs > pvs.out vgs > vgs.out lvs > lvs.out /bin/ls -ltr /dev/mapper>mapper.out fdisk -l > fdisk.out cat /etc/fstab > fstab.out cat /etc/exports > exports.out cat /etc/crontab > crontab.out cat /etc/passwd > passwd.out ip link show > ip.out /bin/netstat -in>netstat-in.out /bin/netstat -rn>netstat-rn.out /sbin/ifconfig -a>ifconfig-a.out cat /etc/sysctl.conf > sysctl.out sleep 10s #For Physical Server vserver=$(lscpu | grep vendor | wc -l) if [ $vserver -gt 0 ] then echo "$(hostname) is a VM" else systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out fi sleep 10s #For Oracle DB Servers if id oracle >/dev/null 2>&1; then /usr/sbin/oracleasm listdisks>asm.out /sbin/multipath -ll > mpath.out /bin/ps -ef|grep pmon > pmon.out else echo "oracle user does not exist on server" fi sleep 10s #Create a tar archive tar -cvf /tmp/$(hostname)-date +%Y%m%d.tar /tmp/conf-bk-$(date +%Y%m%d) sleep 10s #Copy a tar archive to other server sshpass -p 'password' scp /tmp/$(hostname)-`date +%Y%m%d`.tar Server-A:/home/daygeek/backup/ #Remove the backup config folder cd .. rm -Rf conf-bk-$(date +%Y%m%d) rm $(hostname)-`date +%Y%m%d`.tar rm config-file.sh exit 这是将上述脚本推送到目标服务器的子脚本: # vi /home/daygeek/shell-script/conf-remote.sh #!/bin/bash echo -e "Enter the Remote Server Name: \c" read server scp /home/daygeek/shell-script/config-file.sh $server:/tmp/ ssh root@${server} sh /home/daygeek/shell-script/config-file.sh sleep 10s exit 最后运行bash脚本以实现此目的: # sh /home/daygeek/shell-script/conf-remote.sh
运行上述脚本后,使用ls命令检查复制的tar存档文件: # ls -ltrh /home/daygeek/backup/*.tar -rw-r--r-- 1 daygeek daygeek 30K Feb 04 11:01 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar 技术扩展:不使用ls命令列出目录内容,转而使用替代命令的方法。 如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它: # tar -tvf /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar
2、Bash脚本二:备份远程服务器上的配置文件 在此示例中添加了两个脚本,它们与上述脚本相同,但是如果您的环境中有JUMP服务器,这将非常有用。 该脚本允许您将重要的配置文件从客户端系统复制到JUMP box中。 例如,由于我们已经设置了无密码登录名,因此您可以从JUMP服务器访问十个客户端,如果是这样,请使用此脚本。 这是一个真正的bash脚本,用于备份远程服务器上的配置文件: # vi /home/daygeek/shell-script/config-file-1.sh #!/bin/bash mkdir /tmp/conf-bk-$(date +%Y%m%d) cd /tmp/conf-bk-$(date +%Y%m%d) For General Configuration Files hostname > hostname.out uname -a > uname.out uptime > uptime.out cat /etc/hosts > hosts.out /bin/df -h>df-h.out pvs > pvs.out vgs > vgs.out lvs > lvs.out /bin/ls -ltr /dev/mapper>mapper.out fdisk -l > fdisk.out cat /etc/fstab > fstab.out cat /etc/exports > exports.out cat /etc/crontab > crontab.out cat /etc/passwd > passwd.out ip link show > ip.out /bin/netstat -in>netstat-in.out /bin/netstat -rn>netstat-rn.out /sbin/ifconfig -a>ifconfig-a.out cat /etc/sysctl.conf > sysctl.out sleep 10s #For Physical Server vserver=$(lscpu | grep vendor | wc -l) if [ $vserver -gt 0 ] then echo "$(hostname) is a VM" else systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out fi sleep 10s #For Oracle DB Servers if id oracle >/dev/null 2>&1; then /usr/sbin/oracleasm listdisks>asm.out /sbin/multipath -ll > mpath.out /bin/ps -ef|grep pmon > pmon.out else echo "oracle user does not exist on server" fi sleep 10s #Create a tar archieve tar -cvf /tmp/$(hostname)-`date +%Y%m%d`.tar /tmp/conf-bk-$(date +%Y%m%d) sleep 10s #Remove the backup config folder cd .. rm -Rf conf-bk-$(date +%Y%m%d) rm config-file.sh exit 这是将上述脚本推送到目标服务器的子脚本: # vi /home/daygeek/shell-script/conf-remote-1.sh #!/bin/bash echo -e "Enter the Remote Server Name: \c" read server scp /home/daygeek/shell-script/config-file-1.sh $server:/tmp/ ssh root@${server} sh /home/daygeek/shell-script/config-file-1.sh sleep 10s echo -e "Re-Enter the Remote Server Name: \c" read server scp $server:/tmp/$server-`date +%Y%m%d`.tar /home/daygeek/backup/ exit 最后运行bash脚本以实现此目的: # sh /home/daygeek/shell-script/conf-remote-1.sh
运行上述脚本后,使用ls命令检查复制的tar存档文件: # ls -ltrh /home/daygeek/backup/*.tar -rw-r--r-- 1 daygeek daygeek 30K Feb 04 11:44 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar 如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它: # tar -tvf /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar
3、Bash脚本三:在多个Linux远程系统上备份配置文件 该脚本允许您将重要的配置文件从多个远程Linux系统同时复制到JUMP box中。 这是一个真正的bash脚本,用于备份远程服务器上的配置文件: # vi /home/daygeek/shell-script/config-file-2.sh #!/bin/bash mkdir /tmp/conf-bk-$(date +%Y%m%d) cd /tmp/conf-bk-$(date +%Y%m%d) For General Configuration Files hostname > hostname.out uname -a > uname.out uptime > uptime.out cat /etc/hosts > hosts.out /bin/df -h>df-h.out pvs > pvs.out vgs > vgs.out lvs > lvs.out /bin/ls -ltr /dev/mapper>mapper.out fdisk -l > fdisk.out cat /etc/fstab > fstab.out cat /etc/exports > exports.out cat /etc/crontab > crontab.out cat /etc/passwd > passwd.out ip link show > ip.out /bin/netstat -in>netstat-in.out /bin/netstat -rn>netstat-rn.out /sbin/ifconfig -a>ifconfig-a.out cat /etc/sysctl.conf > sysctl.out sleep 10s #For Physical Server vserver=$(lscpu | grep vendor | wc -l) if [ $vserver -gt 0 ] then echo "$(hostname) is a VM" else systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out fi sleep 10s #For Oracle DB Servers if id oracle >/dev/null 2>&1; then /usr/sbin/oracleasm listdisks>asm.out /sbin/multipath -ll > mpath.out /bin/ps -ef|grep pmon > pmon.out else echo "oracle user does not exist on server" fi sleep 10s #Create a tar archieve tar -cvf /tmp/$(hostname)-`date +%Y%m%d`.tar /tmp/conf-bk-$(date +%Y%m%d) sleep 10s #Remove the backup config folder cd .. rm -Rf conf-bk-$(date +%Y%m%d) rm config-file.sh exit 这是将上述脚本推送到目标服务器的子脚本: # vi /home/daygeek/shell-script/conf-remote-2.sh #!/bin/bash for server in CentOS6.2daygeek.com CentOS7.2daygeek.com do scp /home/daygeek/shell-script/config-file-2.sh $server:/tmp/ ssh root@${server} sh /tmp/config-file-2.sh sleep 10s scp $server:/tmp/$server-`date +%Y%m%d`.tar /home/daygeek/backup/ done exit 最后运行bash脚本以实现此目的: # sh /home/daygeek/shell-script/conf-remote-2.sh
运行上述脚本后,使用ls命令检查复制的tar存档文件: # ls -ltrh /home/daygeek/backup/*.tar -rw-r--r-- 1 daygeek daygeek 30K Feb 04 12:37 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar -rw-r--r-- 1 daygeek daygeek 30K Feb 04 12:38 /home/daygeek/backup/CentOS7.2daygeek.com-20200204.tar 如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它: # tar -tvf /home/daygeek/backup/CentOS7.2daygeek.com-20200204.tar
相关主题 |