Los script bash que necesita un SysAdmin

Los script bash que necesita un SysAdmin para manejar un servidor de forma básica.

En «SoloLinux» intentamos publicar los máximos script bash posibles, unos a modo didáctico, otros como simple curiosidad, pero sobre todo hacemos hincapié en los que creemos que necesita un SysAdmin (administrador de sistemas).

En este articulo insertamos los que son prácticamente indispensables, y son cinco…

  • Uso del disco.
  • Backup incremental del «./home».
  • Uso de la cpu.
  • Agregar usuarios al sistema.
  • Backup de la base de datos.

Existen en «SoloLinux» scripts con funciones más avanzadas. Sin embargo, estos te ofrecen una visión general muy rápida, incluyendo en alguno el envió de un correo electrónico en caso de superar el umbral máximo definido.

Los vemos.

 

Script bash que necesita un SysAdmin

Uso del disco:

Este script bash te enviara un email cuando el disco se este quedando sin espacio (ejecutar con una tarea cron).

#!/bin/sh
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  echo $output
  used=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 }' )
  if [ $used -ge 80 ]; then
    echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)" | mail -s "Disk space alert: $used% used" your@email.com
  fi
done

 

Backup incremental del «./home»:

Este script realizara una copia de seguridad incremental en un disco externo (que este montado). De forma predeterminada el backup será de la carpeta «/home«, puedes agregar o modificar las carpetas que te interesen fácilmente.

***Revisa y modifica las rutas establecidas***

#!/bin/bash
# this needs to be a lot more general, but the basic idea is it makes
# rotating backup-snapshots of /home whenever called
 
unset PATH
 
# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;
 
MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
TOUCH=/bin/touch;
 
RSYNC=/usr/bin/rsync;
 
 
# ------------- file locations -----------------------------------------
 
MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/root/snapshot;
EXCLUDES=/usr/local/etc/backup_exclude;
 
 
# ------------- the script itself --------------------------------------
 
# make sure we're running as root
if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root.  Exiting..."; exit; } fi
 
# attempt to remount the RW mount point as RW; else abort
$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
    exit;
}
fi;
 
 
# rotating snapshots of /home (fixme: this should be more general)
 
# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/home/hourly.3 ] ; then         \
$RM -rf $SNAPSHOT_RW/home/hourly.3 ;                \
fi ;
 
# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/home/hourly.2 ] ; then         \
$MV $SNAPSHOT_RW/home/hourly.2 $SNAPSHOT_RW/home/hourly.3 ; \
fi;
if [ -d $SNAPSHOT_RW/home/hourly.1 ] ; then         \
$MV $SNAPSHOT_RW/home/hourly.1 $SNAPSHOT_RW/home/hourly.2 ; \
fi;
 
# step 3: make a hard-link-only (except for dirs) copy of the latest snapshot,
# if that exists
if [ -d $SNAPSHOT_RW/home/hourly.0 ] ; then         \
$CP -al $SNAPSHOT_RW/home/hourly.0 $SNAPSHOT_RW/home/hourly.1 ; \
fi;
 
# step 4: rsync from the system into the latest snapshot (notice that
# rsync behaves like cp --remove-destination by default, so the destination
# is unlinked first.  If it were not so, this would copy over the other
# snapshot(s) too!
$RSYNC                              \
    -va --delete --delete-excluded              \
    --exclude-from="$EXCLUDES"              \
    /home/ $SNAPSHOT_RW/home/hourly.0 ;
 
# step 5: update the mtime of hourly.0 to reflect the snapshot time
$TOUCH $SNAPSHOT_RW/home/hourly.0 ;
 
# and thats it for home.
 
# now remount the RW snapshot mountpoint as readonly
 
$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
    $ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
    exit;
} fi;

Los script bash que necesita un SysAdmin 1

 

Uso de la cpu:

Este script bash te enviara un email cuando la cpu este alcanzando sus limites (ejecutar con una tarea cron).

#!/bin/bash
while [ true ] ;do
used=`free -m |awk 'NR==3 {print $4}'`
 
if [ $used -lt 1000 ] && [ $used -gt 800 ]; then
echo "Free memory is below 1000MB. Possible memory leak!!!" | /bin/mail -s "HIGH MEMORY ALERT!!!" mimail@mydomain.com
 
 
fi
sleep 5
done

 

Agregar usuarios al sistema:

Este bash permite al root o usuario con permisos, agregar nuevos usuarios al sistema de manera rapida y sencilla, solo debe escribir el nombre de usuario y la contraseña.

#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
    read -p "Enter username : " username
    read -s -p "Enter password : " password
    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
        useradd -m -p $pass $username
        [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
    fi
else
    echo "Only root may add a user to the system"
    exit 2
fi

Los script bash que necesita un SysAdmin 2

 

Backup de la base de datos:

Este script, es de lo más básico. Se limita a hacer un backup de la base de datos en la ruta que le indiques.

***Modifica los datos y rutas establecidas por defecto***

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser--password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

 

Espero te ayude alguno de estos scripts que «necesita un SysAdmin«.

 

Agregar comentario