reworking content
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# Running On Multiple Servers
|
||||
|
||||
Automate script execution across multiple remote servers. Instead of manual copying and logging in, learn to run Bash scripts on many machines with a single command.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
You'll need a few remote Linux servers with **SSH access**. Gather their **IP addresses** or **hostnames** and list them in a file named `servers.txt`, one per line.
|
||||
|
||||
Create `servers.txt`:
|
||||
|
||||
```bash
|
||||
touch servers.txt
|
||||
```
|
||||
|
||||
Open `servers.txt` and add your server details:
|
||||
|
||||
```
|
||||
your_server_ip_1
|
||||
your_server_ip_2
|
||||
your_server_ip_3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### The Script for Remote Execution
|
||||
|
||||
We'll use a simple Bash script that performs basic server checks: memory, CPU, TCP connections, and kernel version. Create a file named `remote_check.sh` and add the following content:
|
||||
|
||||
```bash
|
||||
touch remote_check.sh
|
||||
```
|
||||
|
||||
Open `remote_check.sh` and add:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##
|
||||
# Server status script:
|
||||
# - Memory usage
|
||||
# - CPU load
|
||||
# - Number of TCP connections
|
||||
# - Kernel version
|
||||
##
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Execute on Remote Servers
|
||||
|
||||
With `remote_check.sh` and `servers.txt` ready, run the following single command. This loop iterates through each server, using **SSH** to execute the script without local file transfer or manual logins.
|
||||
|
||||
```bash
|
||||
for server in $(cat servers.txt); do ssh your_user@"${server}" 'bash -s' < ./remote_check.sh; done
|
||||
```
|
||||
|
||||
**Breakdown:**
|
||||
* `for server in $(cat servers.txt)`: Reads each IP/hostname from `servers.txt` into the `server` variable.
|
||||
* `ssh your_user@"${server}"`: Connects to the remote server via SSH as `your_user`.
|
||||
* `'bash -s'`: Executes a Bash shell on the remote server, reading commands from standard input.
|
||||
* `< ./remote_check.sh`: Redirects the local `remote_check.sh` script's content to the remote Bash shell's standard input.
|
||||
|
||||
Each server will then execute the script, printing its status checks directly to your local terminal.
|
||||
|
||||
---
|
||||
|
||||
### Conclusion
|
||||
|
||||
This method efficiently executes Bash scripts across multiple remote servers. It avoids manual file transfers and individual logins, proving scalable for more complex scripts and larger environments. For extensive, state-managed automation, dedicated tools are often recommended.
|
||||
|
||||
> {notice} This content was inspired by a piece by softwareshinobi on Dev Team Six.
|
||||
Reference in New Issue
Block a user