shell习题-批量同步代码

需求背景是:

一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具。有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上。但是其他2台服务器也需要做相同变更。

写一个shell脚本,把A服务器上的变更代码同步到B和C上。

其中,你需要考虑到不需要同步的目录(假如有tmp、upload、logs、caches)

#!/bin/bash

echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上";
read -p "是否要继续?(y|n) "

rs() {
    rsync -azP     --exclude logs     --exclude upload     --exclude caches     --exclude tmp www.aaa.com/ $1:/data/wwwroot/www.aaa.com/

}

if [ $REPLY == ‘y‘ -o $REPLY == ‘Y‘ ]
then
    echo "即将同步……"
    sleep 2
    cd /data/wwwroot/
    rs B机器ip
    rs C机器ip
    echo "同步完成。"   
elif [ $REPLY == ‘n‘ -o $REPLY == ‘N‘ ]
then
    exit 1
else
    echo "请输入字母y或者n"
fi
时间: 2024-11-04 16:53:24

shell习题-批量同步代码的相关文章

python批量同步web服务器代码核心程序

#!/usr/bin/env python #coding:utf8 import os,sys import md5,tab from mysql_co.my_db import set_mysql from ssh_co.ssh_connect import sshd from ssh_co.cfg.config import ssh_message,item_path from file import findfile def my_mysql(): db_file={} my_conne

shell脚本批量收集linux服务器的硬件信息快速实现

安装ansible批量管理系统.(没有的话,ssh远程命令循环也可以) 在常用的数据库里面新建一张表,用你要收集的信息作为列名,提供可以用shell插入. 批量安装所需工具包,smartmontools.dmidecode.mysql,可以用ansible命令:ansible all_host -s -m yum -a "name=mysql" 在本地写脚本. 获取默认IP:default_ip=$(ifconfig|head -n 2|tail -n 1|cut -d ":

synchronized同步代码块锁释放

今天发现自己写的线上程序出现数据库不能同步的问题,查看日志已经停止记录,随后使用jstack查看线程的运行状况,发现有个同步线程锁住了. 以下是jstack -l 637  问题线程的内容. "schedulerJob-t-291" #314 daemon prio=5 os_prio=0 tid=0x00007f7d64844800 nid=0x3d5 runnable [0x00007f7d3a107000] java.lang.Thread.State: RUNNABLE at

expect批量同步或执行命令工具

expect脚本同步文件 我们知道主机间传输一个文件受网络.文件大小和磁盘读写速率的影响,在传输一个文件时不可能一下子马上传输到对方,但是使用expect脚本的过程中,值得注意的是在脚本结尾以expect eof结束整个脚本,它的作用是当脚本内涉及到有文件传输时,会让文件传输完成后再彻底结束掉脚本进程,这样会让文件能够成功传输到对方主机上.expect若使用exit或者没有eof这个选项,那么在执行脚本时,expect不管你是否有文件正在传输,当脚本内容执行完成后直接结束掉自己的进程,这样就会造

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?

GitHub虽好,但毕竟在国内访问不是很稳定,速度也不快,而且推送到上面的源码等资料必须公开,除非你给他交了保护费:所以有条件的话,建议大家搭建自己的Git Server.本地和局域网服务器都好,不信你试试,那速度,怎一个爽字了得! 默认情况下,使用TortoiseGit同步代码,每次都需要输入用户名和密码,但为了方便可以在客户端创建ssh密钥,用于服务器端和客户端的认证(详细过程大家可参考这里),但有时会出现“ 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步

java同步代码块

/** abc三个售票窗口,售50张票. 需求:可以做到同时销售,且不能卖重叠的,以及不能超过50 同步代码块 synchronized(对象){     同步代码块: } 对象如同锁,持有锁的线程可以在同步中执行 没有持有锁的线程即使获得CPU的执行器,也无法执行. 同步前提: 1.多线程的代码块才需要同步,即run里的代码才需要加同步.对共享数据加同步 2.必须是多个线程使用同一个锁,才需要同步 好处:提高多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源 */ class Tickt

多线程(同步代码块和同步函数)

线程安全问题 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,    另一个线程参与进来执行.导致共享数据的错误. 解决办法:    对多条操作共享数据的语句,只能让一个线程都执行完.在执行过程中,其他线程不可以参与执行. Java对于多线程的安全问题提供了专业的解决方式.就是同步代码块. synchronized(对象){    需要被同步的代码}对象如同锁.持有锁的线程可以在同步中执行.没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁.

Shell脚本批量创建用户并随机生成密码

要求:批量创建10个系统账号oldboy01-oldboy10,并设置生成密码(密码不同). 实现脚本: #!/bin/bash #Question3 for i in $(seq -w 10) do         useradd -s /bin/bash oldboy$i         echo "password$i" | md5sum | tee -a passwd.txt | passwd --stdin  oldboy$i done 脚本执行效果: [[email pro