在多台远程服务器上执行BASH脚本


文档摘要

在多台远程服务器上执行 BASH 脚本 您可以在命令行中运行的任何命令,都可以在 BASH 脚本中使用。脚本用于运行一系列命令。Bash 在 Linux 和 macOS 操作系统上默认可用。 让我们设想这样一个场景:您需要在多台远程服务器上执行一个 BASH 脚本,但又不想手动将脚本复制到每台服务器,然后再逐一登录到每台服务器并执行脚本。 当然,您可以使用 Ansible 等工具,但让我们先学习如何仅用 Bash 来完成这一任务! 前提条件 在这个示例中,我将使用部署在 DigitalOcean 上的 3 台远程 Ubuntu 服务器。如果您还没有 DigitalOcean 账户,可以通过此推荐链接注册 DigitalOcean 并获得 $100 免费额度: https://m.do.

在多台远程服务器上执行 BASH 脚本

您可以在命令行中运行的任何命令,都可以在 BASH 脚本中使用。脚本用于运行一系列命令。Bash 在 Linux 和 macOS 操作系统上默认可用。

让我们设想这样一个场景:您需要在多台远程服务器上执行一个 BASH 脚本,但又不想手动将脚本复制到每台服务器,然后再逐一登录到每台服务器并执行脚本。

当然,您可以使用 Ansible 等工具,但让我们先学习如何仅用 Bash 来完成这一任务!

前提条件

在这个示例中,我将使用部署在 DigitalOcean 上的 3 台远程 Ubuntu 服务器。如果您还没有 DigitalOcean 账户,可以通过此推荐链接注册 DigitalOcean 并获得 $100 免费额度:

https://m.do.co/c/2a9bba940f39

准备好 DigitalOcean 账户后,继续部署 3 个 Droplet。

我已经创建了 3 台 Ubuntu 服务器:

DigitalOcean Ubuntu 服务器

我会把这些服务器的 IP 地址放入一个 servers.txt 文件中,以便在我们的 BASH 脚本中循环遍历这些 IP。

如果您是 DigitalOcean 的新手,可以按照以下步骤创建 Droplet:

您也可以通过此视频了解如何进行初始服务器设置:

或者更好的是,您可以参考这篇文章,了解如何使用 BASH 自动化初始服务器设置:

使用 BASH 自动化 Ubuntu 18.04 的初始服务器设置

现在我们已经准备好了这 3 台新服务器,接下来就可以专注于只用一条命令在所有服务器上运行我们的 BASH 脚本!

BASH 脚本

我将重用上一章中的演示脚本,并稍作修改。该脚本会简单地执行一些检查,例如当前内存使用情况、当前 CPU 使用情况、TCP 连接数以及内核版本。

#!/bin/bash ## # BASH script that checks the following: # - Memory usage # - CPU load # - Number of TCP connections # - Kernel version ## ## # Memory check ## server_name=$(hostname) function memory_check() { echo "#######" echo "The current memory usage on ${server_name} is: " free -h echo "#######" } function cpu_check() { echo "#######" echo "The current CPU load on ${server_name} is: " echo "" uptime echo "#######" } function tcp_check() { echo "#######" echo "Total TCP connections on ${server_name}: " echo "" cat /proc/net/tcp | wc -l echo "#######" } function kernel_check() { echo "#######" echo "The exact Kernel version on ${server_name} is: " echo "" uname -r echo "#######" } function all_checks() { memory_check cpu_check tcp_check kernel_check } all_checks

复制下面的代码,并将其保存到名为 remote_check.sh 的文件中。您也可以从 这里 获取该脚本。

在所有服务器上运行脚本

现在脚本和服务器都已经准备就绪,并且我们已将这些服务器的 IP 地址添加到 servers.txt 文件中,我们可以运行以下命令来循环遍历所有服务器,并在远程执行脚本,而无需将脚本复制到每台服务器或逐个连接到每台服务器。

for server in $(cat servers.txt) ; do ssh your_user@${server} 'bash -s' < ./remote_check.sh ; done

这个 for 循环的作用是:它会遍历 servers.txt 文件中的每一台服务器,并为列表中的每个条目运行以下命令:

ssh your_user@the_server_ip 'bash -s' < ./remote_check.sh

您将得到如下输出:

在多台远程服务器上运行 BASH 脚本

结论

这只是个非常简单的示例,说明如何在多台服务器上执行一个简单的脚本,而无需将脚本复制到每台服务器,也无需单独访问每台服务器。

当然,您也可以运行更复杂的脚本,并在更多服务器上执行。

如果您对自动化感兴趣,我建议您查看 DigitalOcean 网站上的 Ansible 资源页面:

Ansible 资源

{notice} 此内容最初发布在 DevDojo 上。

免责声明
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议采用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。


作者与出处
原作者: bobbyiliev
来源:bobbyiliev
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: bobbyiliev 转发
评论区 (0)
U