Linux编写xcall命令执行与xsync文件同步脚本
在多机集群环境中,运维人员经常需要对多台服务器执行相同操作或同步分发文件,这不仅繁琐而且容易出错。为了提升工作效率和操作一致性,本文介绍了两个实用的 Linux 脚本工具——xcall 和 xsync。xcall 脚本支持多主机并行执行指定命令,极大地方便了集群管理和批量任务执行;xsync 脚本则通过 rsync 实现了多台机器间的文件目录同步,确保环境配置和数据一致。本文详细说明了脚本的创建方法与使用示例,帮助大家轻松完成中间件集群安装与配置工作。
环境准备
- 一台以上的centos服务器
- 各个机器之间完成的ssh免密
关于如何
ssh免密
,推荐我的博文 # centos之间ssh免密
xsync
创建配置
集群中的机器都需要执行下面的命令,进行安装
rsync
1
sudo yum install rsync -y
在需要的节点上执行下面的命令,以便创建
xsync
执行命令之前,注意修改
for i in master node1 node2
为自己的主机ip1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50sudo tee /usr/local/bin/xsync <<'EOF'
#!/bin/bash
# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]; then
echo "No parameter found!";
exit 1;
fi
# 获取传输文件名
p1=$1
filename=$(basename "$p1")
echo "Load file $p1 success!"
# 获取文件的绝对路径
pdir=$(cd -P $(dirname "$p1") && pwd)
echo "File path is $pdir"
# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$2
case "$user" in
"-root")
user="root"
;;
"")
user=$(whoami)
;;
*)
echo "Illegal parameter $user"
exit 1
;;
esac
echo "Using user: $user"
# 确保从机的目标目录存在
for i in master node1 node2; do
echo "================current host is $i================="
ssh "$user@$i" "mkdir -p $pdir"
rsync -av "$pdir/$filename" "$user@$i:$pdir"
if [ $? -ne 0 ]; then
echo "Rsync to $i failed!"
exit 1
fi
done
echo "Complete!"
EOF
sudo chmod +x /usr/local/bin/xsync
使用示例
将one.txt
分发到集群的其他机器的相同路径下
1 | [admin@master tmp]$ xsync one.txt |
xcall
创建配置
在需要的节点上执行下面命令即可完成创建配置xcall
执行命令之前,注意修改
for i in master node1 node2
为自己的主机ip
1 | sudo tee /usr/local/bin/xcall <<'EOF' |
使用示例
使用 xcall
脚本查看集群中所有机器的java进程。
1 | [admin@master bin]$ xcall jps |
结语
通过 xcall 和 xsync 脚本的应用,运维人员能够显著简化多机环境下的重复操作与文件同步任务,降低人为操作风险,提升工作效率。这两个工具兼具易用性与实用性,适合各种中间件集群及多节点部署场景。希望本文分享的脚本和方法能为您的运维管理带来便利,推动集群运维自动化的进程。后续可根据实际需求进一步扩展脚本功能,实现更智能化的集群管理
Linux编写xcall命令执行与xsync文件同步脚本