GNU/Linux >> Znalost Linux >  >> Linux

Bash Beginner Series #10:Automatizace s Bash

Nyní můžete využít všechny bash dovednosti, které jste se naučili v této Bash Beginner Series, k vytvoření velmi užitečných bash skriptů, které vám pomohou při automatizaci nudných opakujících se administrativních úkolů.

Automatizace by skutečně měla být vaším konečným cílem, kdykoli píšete bash skript.

V tomto tutoriálu vám ukážu některé automatizační skripty, které můžete později rozšířit a automatizovat jakýkoli úkol, který chcete. Tyto skripty budou využívat pole bash, if-else, smyčky a další koncepty, které jste se naučili v této sérii.

Automatizace správy uživatelů pomocí skriptu bash

Vytvoření uživatele na více serverech je možná něco, co byste dělali denně jako správce systému. Je to zdlouhavý úkol, a tak pojďme vytvořit bash skript, který to automatizuje.

Nejprve vytvořte textový soubor, který bude obsahovat všechny názvy serverů nebo IP adresy, na které chcete uživatele přidat.

Například zde jsem vytvořil soubor servers.txt který zahrnuje pět různých serverů:

[email protected]:~$ cat servers.txt
server1
server2
server3
server4
server5

Mějte na paměti, že jsem použil názvy hostitelů serverů, protože adresy IP jsem již zahrnul do svého /etc/hosts soubor. Zde můžete také použít konfigurační soubor SSH.

Nyní se podívejte na následující adduser.sh bash skript:

#!/bin/bash

servers=$(cat servers.txt)

echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid

for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done

Soubor adduser.sh skript vás nejprve požádá o zadání uživatelského jména a ID uživatele, kterého chcete přidat; poté se přepne do smyčky a připojí se ke všem serverům v souboru servers.txt soubor přes SSH a přidejte požadovaného uživatele.

Spustíme skript a uvidíme, jak to funguje:

Skript proběhl úspěšně a uživatel ansible byl přidán na všech pět serverů. Zde je několik důležitých bodů, kterým musíte porozumět:

  • Můžete použít prázdné ssh předat fráze nebo spustit ssh-agent abyste nebyli vyzváni k zadání klíče (nebo hesla), když je skript spuštěn.
  • Musíte mít platný účet, který má superuživatelský přístup (bez požadavku na heslo) na všech serverech.

Představte si, že potřebujete přidat uživatele na 100+ různých linuxových serverech! Soubor adduser.sh skript vám rozhodně ušetří nespočet hodin práce.

Automatizace zálohování pomocí skriptu bash

Zálohování je něco, co všichni děláme pravidelně, tak proč to nezautomatizovat? Podívejte se na následující backup.sh skript:

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Starting backup of: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done

sudo rm /tmp/*.gzecho "Backup is done."

Nejprve jste tedy vytvořili pole s názvem backup_dirs který ukládá všechny názvy adresářů, které chceme zálohovat. Potom jste vytvořili tři další proměnné:

  • cílový_adresář: Chcete-li určit cílový adresář zálohy.
  • cílový_server: Chcete-li zadat cílový server zálohy.
  • backup_time: Chcete-li zadat datum zálohování.

Dále pro všechny adresáře v backup_dirs pole, vytvořte gzip komprimovaný archiv tar v /tmp a poté použijte scp příkaz k odeslání/kopírování zálohy na cílový server. Nakonec odstraňte všechny archivy gzip z /tmp .

Zde je ukázka spuštění backup.sh skript:

[email protected]:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s   00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s   00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100%  105MB 520.2KB/s   03:26
/boot transfer succeeded.
Backup is done.

Možná budete chtít spustit zálohování každý den o půlnoci. V tomto případě můžete naplánovat spuštění skriptu jako cron úlohy:

[email protected]:~$ crontab -e
0	0	*	*	* /home/kabary/scripts/backup.sh

Monitorování dostupného místa na disku


Souborové systémy jsou předurčeny k nedostatku místa, jediné, co můžete udělat, je jednat rychle, než váš systém spadne! Můžete použít df pro zobrazení zbývajícího místa na libovolném souborovém systému:

[email protected]:~$ df -h / /apps /database
Filesystem Size  Used Avail Use% Mounted on
/dev/sda5 20G  7.9G   11G  44% /
/dev/mapper/vg1-applv 4.9G  2.4G  2.3G  52% /apps
/dev/mapper/vg1-dblv 4.9G  4.5G  180M  97% /database

Moje /databáze souborový systém je téměř zaplněn, protože je aktuálně využíván na 97 %. Mohu zobrazit pouze použití, pokud pomocí příkazu awk zobrazím pouze páté pole.

Nyní se podívejte na následující disk_space.sh bash skript:

#!/bin/bash
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Running out of space on $i, Usage is: $usage%"
echo "Sending out a disk space alert email."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done

Nejprve jste vytvořili systémy souborů pole, která obsahují všechny souborové systémy, které chcete monitorovat. Poté si pro každý souborový systém vezmete procento využití a zkontrolujete, zda je větší nebo rovno 90. Pokud je využití vyšší než 90 %, odešle e-mail s upozorněním, že v souborovém systému dochází místo.

Všimněte si, že je třeba nahradit váš_e-mail ve skriptu s vaším skutečným e-mailem.

Spustil jsem skript:

[email protected]:~$ ./disk_space.sh
Sending out a disk space alert email.

A do schránky mi přišel následující e-mail:

Možná budete chtít spustit soubor disk_space.sh scénář šest hodin nebo tak. V tomto případě můžete také naplánovat spuštění skriptu jako cron úlohy:

[email protected]:~$ crontab -e
0	*/6 *		*		* /home/kabary/scripts/disk_space.sh

Můžete si procvičit některé další pokusy o vyřešení problémů uvedených v sešitu níže. A ano, zahrnují také odpovědi.

Bash Kapitola 10 Cvičné otázkyProblémy a jejich řešení k procvičení toho, co jste se právě naučili v této kapitoleBash-Kapitola-10-Procvičení-otázek-Linux-Příručka.pdf40 KB

Tím se dostáváme na konec naší série výukových programů pro začátečníky bash. Doufám, že se vám učení bash skriptování líbilo. Se skriptováním bash ve vašem arzenálu dovedností můžete v Linuxu automatizovat jakýkoli nudný a únavný úkol!

Celá série Bash Beginner Series je k dispozici také ve formátu PDF. Můžete si jej zakoupit, abyste nás podpořili. Kniha je k dispozici zdarma (spolu s několika dalšími knihami pro naše členy Pro).

Koupit Bash Beginner Series ve formátu PDF
Linux
  1. Který Shell Interpreter spouští skript s No Shebang?

  2. Bash skript s `set -e` se nezastaví při příkazu `… &&…`?

  3. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  1. Bash Beginner Series #9:Použití funkcí v Bash

  2. Bash Beginner Series #8:Loops in Bash

  3. Přidání do $PYTHONPATH pomocí bash skriptu

  1. Nelze zastavit Bash skript pomocí Ctrl+c?

  2. základní jméno s mezerami ve skriptu bash?

  3. Jak zabít python skript pomocí bash skriptu