GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Beginner Series #10:Automazione con Bash

Ora puoi utilizzare tutte le abilità di bash che hai appreso in questa serie per principianti di Bash per creare script bash molto utili che ti aiuterebbero ad automatizzare noiose attività amministrative ripetitive.

L'automazione dovrebbe davvero essere il tuo obiettivo finale ogni volta che scrivi uno script bash.

In questo tutorial, ti mostrerò alcuni script di automazione che puoi estendere in seguito per automatizzare qualsiasi attività desideri. Questi script utilizzeranno array bash, if-else, loop e altri concetti che hai appreso in questa serie.

Automazione della gestione degli utenti con lo script bash

La creazione di un utente su più server potrebbe essere qualcosa che faresti quotidianamente come amministratore di sistema. È un compito noioso, quindi creiamo uno script bash che lo automatizza.

Innanzitutto, crea un file di testo che includa tutti i nomi host del server o gli indirizzi IP su cui desideri aggiungere l'utente.

Ad esempio, qui ho creato il file servers.txt che include cinque diversi server:

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

Tieni presente che ho utilizzato i nomi host del server poiché ho già incluso gli indirizzi IP nel mio /etc/hosts file. Puoi anche usare il file di configurazione SSH qui.

Ora dai un'occhiata al seguente adduser.sh script bash:

#!/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

Il adduser.sh lo script ti chiederà prima di inserire il nome utente e l'ID utente dell'utente che desideri aggiungere; quindi, eseguirà il loop e si connetterà a tutti i server nel servers.txt file tramite SSH e aggiungi l'utente richiesto.

Eseguiamo lo script e vediamo come funziona:

Lo script è stato eseguito correttamente e user ansible è stato aggiunto su tutti e cinque i server. Ci sono un paio di punti importanti che devi capire:

  • Puoi utilizzare ssh vuoto passphrase o esegui ssh-agent per evitare che venga richiesto di inserire una chiave (o una password) mentre lo script è in esecuzione.
  • Devi disporre di un account valido con accesso superutente (senza obbligo di password) su tutti i server.

Immagina di dover aggiungere un utente su oltre 100 server Linux diversi! Il adduser.sh script può sicuramente farti risparmiare innumerevoli ore di lavoro.

Automazione dei backup con lo script bash

Fare backup è qualcosa che facciamo tutti regolarmente, quindi perché non automatizzarlo? Dai un'occhiata al seguente backup.sh sceneggiatura:

#!/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."

Quindi, hai prima creato un array chiamato backup_dirs che memorizza tutti i nomi di directory di cui vogliamo eseguire il backup. Quindi, hai creato altre tre variabili:

  • dir_destinazione: Per specificare la directory di destinazione del backup.
  • server_destinazione: Per specificare il server di destinazione del backup.
  • tempo di backup: Per specificare la data del backup.

Successivamente, per tutte le directory in backup_dirs array, crea un archivio tar compresso con gzip in /tmp , quindi usa scp comando per inviare/copiare il backup sul server di destinazione. Infine, rimuovi tutti gli archivi gzip da /tmp .

Ecco un esempio di esecuzione di backup.sh sceneggiatura:

[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.

Potresti voler eseguire i backup ogni giorno a mezzanotte. In questo caso, puoi pianificare lo script per l'esecuzione come processo cron:

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

Monitoraggio dello spazio su disco disponibile


I filesystem sono destinati a esaurire lo spazio, l'unica cosa che puoi fare è agire velocemente prima che il tuo sistema vada in crash! Puoi utilizzare il comando df per vedere lo spazio rimanente su qualsiasi filesystem:

[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

Il mio /database il filesystem ha quasi esaurito lo spazio in quanto attualmente è al 97% di utilizzo. Posso visualizzare solo l'utilizzo se utilizzo il comando awk per mostrare solo il quinto campo.

Ora dai un'occhiata al seguente spazio_disco.sh script bash:

#!/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

Innanzitutto, hai creato un filesystem array che contengono tutti i filesystem che si desidera monitorare. Quindi, per ogni filesystem, prendi la percentuale di utilizzo e controlla se è maggiore o uguale a 90. Se l'utilizzo è superiore al 90%, invia un'e-mail di avviso che indica che il filesystem sta esaurendo lo spazio.

Nota che devi sostituire la tua_email nello script con la tua email effettiva.

Ho eseguito lo script:

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

E ho ricevuto la seguente email nella mia casella di posta:

Potresti voler eseguire spazio_disco.sh sceneggiatura sei ore o giù di lì. In questo caso, puoi anche pianificare lo script in modo che venga eseguito come cron job:

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

Puoi esercitarti ancora cercando di risolvere i problemi presentati nella cartella di lavoro di seguito. E sì, includono anche le risposte.

Bash Capitolo 10 Domande pratiche Problemi e la loro soluzione per mettere in pratica ciò che hai appena appreso in questo capitolo Bash-Capitolo-10-Domande pratiche-Linux-Handbook.pdf40 KB

Questo ci porta alla fine della nostra serie di tutorial per principianti di bash. Spero che ti sia piaciuto imparare lo scripting bash. Con lo scripting bash nel tuo arsenale di abilità, puoi automatizzare qualsiasi attività noiosa e noiosa in Linux!

L'intera serie Bash Beginner è disponibile anche in formato PDF. Puoi acquistarlo per supportarci. Il libro è disponibile gratuitamente (insieme a molti altri libri per i nostri membri Pro).

Acquista la serie per principianti Bash in formato PDF
Linux
  1. Impossibile interrompere uno script Bash con Ctrl+c?

  2. Bash Beginner Series #9:Utilizzo delle funzioni in Bash

  3. Bash Beginner Series #8:Loop in Bash

  4. Autorizzazione negata con bash.sh per eseguire cron

  5. Come uccidere lo script Python con lo script bash

Bash Beginner Series #5:Utilizzo di operatori aritmetici negli script Bash

Bash Beginner Series #4:Utilizzo di array in Bash

Bash Beginner Series #3:Passare argomenti agli script Bash

Bash Beginner Series #7:Decision Making With If Else e Case Statements

Bash Beginner Series #6:Operazioni con le stringhe in Bash

Script Bash per Loop spiegato con esempi