Bash para principiantes Serie # 10: Automatización con Bash

¿Cómo estais? soy Luis. Os traigo un nuevo post sobre el sistema operativo mas molón. Encantado linuxeros.

Ahora puede usar todas las habilidades de bash que aprendió en esta serie para principiantes de Bash para crear muchos scripts de bash útiles que lo ayudarán a automatizar tareas administrativas aburridas y repetitivas.

La automatización realmente debería ser su objetivo final al escribir un script bash.

En este tutorial, le mostraré algunos scripts de automatización que luego puede expandir para automatizar cualquier tarea que desee. Estos scripts usarán matrices de bash, if-else, bucles y otros conceptos que aprendió en esta serie.

Gestión de usuarios automatizada con script bash

La creación de un usuario en varios servidores es probablemente algo que haría a diario como administrador del sistema. Esta es una tarea tediosa, así que creemos un script bash para automatizarlo.

Primero, cree un archivo de texto que incluya todos los nombres de host del servidor o direcciones IP donde desea agregar el usuario.

Por ejemplo, creé el archivo aquí servidores.txt que incluye cinco servidores diferentes:

kabary@handbook:~$ cat servers.txt
server1
server2
server3
server4
server5

Tenga en cuenta que utilicé nombres de host del servidor porque ya incluí direcciones IP en el mío / etc / hosts expediente. También puede utilizar un archivo de configuración SSH aquí.

Ahora considere lo siguiente adduser.sh script de 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

El adduser.sh la secuencia de comandos primero le pedirá que ingrese el nombre de usuario y la identificación de usuario del usuario que desea agregar; luego rotará y se conectará a todos los servidores en servidores.txt archivo a través de SSH y agregue el usuario solicitado.

Ejecutemos el script y veamos cómo funciona:

El script se ejecuta correctamente y el conjunto de usuarios se agrega a los cinco servidores. A continuación, se incluyen algunos puntos importantes que debe comprender:

Puedes usar espacio en blanco ssh pasar frases o correr agente ssh para evitar que se le solicite ingresar una clave (o contraseña) mientras se ejecuta el script. Debe tener una cuenta válida que tenga acceso de superusuario (no se requiere contraseña) en todos los servidores.

¡Imagínese tener que agregar un usuario a más de 100 servidores Linux diferentes! El adduser.sh el guión definitivamente puede ahorrarle innumerables horas de trabajo.

Automatizar el archivado con script bash

Hacer copias de seguridad es algo que todos hacemos de forma regular, así que ¿por qué no automatizarlo? Tenga en cuenta lo siguiente backup.sh texto:

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

Entonces, primero creaste una matriz con un nombre backup_dirs que almacena todos los nombres de directorio que queremos archivar. Luego creó otras tres variables:

dest_dir: Para especificar el destino de la copia de seguridad.

dest_server: Para configurar el servidor de destino de la copia de seguridad.

backup_time: Para especificar la fecha de la copia de seguridad.

Luego, para todos los directorios en backup_dirs matriz, crea un archivo comprimido gzip de tar en / tmp, luego usa scp comando para enviar / copiar el archivo al servidor de destino. Finalmente elimine todos los archivos gzip de / tmp.

Aquí hay una implementación de ejemplo de backup.sh texto:

kabary@handbook:~$ ./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.

Es posible que desee realizar copias de seguridad todos los días a la medianoche. En este caso, puede programar la secuencia de comandos para que se ejecute como un trabajo cron:

kabary@handbook:~$ crontab -e
0	0	*	*	* /home/kabary/scripts/backup.sh

Monitoreo del espacio disponible en disco

Los sistemas de archivos están diseñados para quedarse sin espacio, ¡lo único que puede hacer es actuar rápido antes de que su sistema se bloquee! Puedes usar df para ver el espacio restante en cada sistema de archivos:

kabary@handbook:~$ 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

Dios mío /base de datos El sistema de archivos está casi agotado, ya que actualmente usa el 97%. Solo puedo mostrar el uso si uso el comando awk para mostrar solo el quinto campo.

Ahora considere lo siguiente disk_space.sh script de 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

Primero, creaste sistemas de archivos matrices que contienen todos los sistemas de archivos que desea supervisar. Luego, para cada sistema de archivos, toma la tasa de uso y verifica si es mayor o igual a 90. Si el uso es superior al 90%, envía un correo electrónico de advertencia que indica que el sistema de archivos se está agotando.

Tenga en cuenta que necesita reemplazar Tu correo electrónico en el guión con su correo electrónico real.

Lancé el guión:

kabary@handbook:~$ ./disk_space.sh
Sending out a disk space alert email.

Y recibí el siguiente correo electrónico en mi bandeja de entrada:

Es posible que desee comenzar disk_space.sh escenario de seis horas más o menos. En este caso, también puede programar la secuencia de comandos para que se ejecute como un trabajo cron:

kabary@handbook:~$ crontab -e
0	*/6 *		*		* /home/kabary/scripts/disk_space.sh

¡Genial! Esto nos lleva al final de nuestra serie de principiantes para principiantes de bash. Espero que hayas disfrutado aprendiendo los scripts de bash. ¡Con los scripts bash en su arsenal de habilidades, puede automatizar cualquier tarea aburrida y tediosa en Linux!

Toda la serie Bash Beginner junto con ejercicios adicionales se compilan en un libro electrónico. Estará disponible de forma gratuita para nuestros miembros sudo y root. Puedes elegir la membresía o comprar el libro por separado. ¡Quédate en la línea!

Este Blog lo escribimos para ayudar y servir de ayuda a la comunidad Linux. Esperamos que os guste.

Leave a Reply