Los scripts bash imprescindibles de un sysadmin linux

Los scripts bash imprescindibles de un sysadmin linux.

Cualquier administrador de sistemas linux (sysadmin), hace las mismas tareas decenas de veces cada día. Por mucho que te guste tu trabajo, al final te cansas de repetir y repetir siempre lo mismo, uff.

Uno buena forma de ser más productivo y hacer que nuestra tarea sea más amena es, crear nuestros propios scripts bash imprescindibles y, aplicar tareas cron que automaticen las tareas comunes que realizamos todos los días.

En este artículo, vemos los scripts bash imprescindibles que todo buen sysadmin necesita a diario. Solo tienes que modificar con tus datos o valores, están listos para su uso.

Scripts bash imprescindibles de un sysadmin

Scripts bash imprescindibles de un sysadmin

 

Los scripts bash imprescindibles de un sysadmin

Nosotros te proponemos seis scrips, que a título personal te puedo decir que utilizo prácticamente a diario (algunos varias veces al día).

Script que limpia el servidor Apache
#!/bin/bash
#!/bin/bash
# scripts bash imprescindibles de un sysadmin linux
#
echo "<---------------------------------------------------------->"
echo "<---------------------------------------------------------->"
echo "Comprobando estado de memoria"
free
echo "OK - Comprobacion completada"
echo "<---------------------------------------------------------->"

sleep 2s; echo “Limpieza de memoria cache y swap“;
echo "<---------------------------------------------------------->"

sleep 2s; echo "Deshabilitando HTTP"
killall -KILL httpd
echo "OK - Http deshabilitado"
echo "<---------------------------------------------------------->"

sleep 5s; echo "Deshabilitando Swap"
swapoff -a
echo "OK - Swap deshabilitado"
echo "<---------------------------------------------------------->"

sleep 5s; echo "Liberando page-caches, dentries e inodes"
sync;sysctl -w vm.drop_caches=3;sync
echo "OK - Server liberado"
echo "<---------------------------------------------------------->"

sleep 2s; echo "Habilitando la Swap"
swapon -a
echo "OK - Swap habilitado"
echo "<---------------------------------------------------------->"

sleep 2s; echo "Habilitando HTTP"
service httpd start
echo "OK - Http habilitado"
echo "<---------------------------------------------------------->"

sleep 2s; free
echo ".....MANTENIMIENTO CONCLUIDO....."
echo "<---------------------------------------------------------->"
echo "<---------------------------------------------------------->"

 

Script que verifica el uso del disco
#!/bin/bash
threshold="20"
i=2
result=`df -kh |grep -v "Filesystem" | awk '{ print $5 }' | sed 's/%//g'`
for percent in $result; do
if ((percent > threshold))
then
partition=`df -kh | head -$i | tail -1| awk '{print $1}'`
echo "$partition at $(hostname -f) is ${percent}% full"
fi
let i=$i+1
done

Ejemplo de salida…

root@sololinux # bash spacedisk.sh
tmpfs at sololinux is 39% full
/dev/sdb1 at sololinux is 72% full

 

Crear backups remotos por FTP
#!/bin/bash
# scripts bash imprescindibles de un sysadmin linux
# File System Backups via FTP with MySQL Databases
## 
# Guardar en /bin/ftpbackup.sh y hacer ejecutable
# chmod +x /bin/ftpbackup.sh
## Your System Settings ##
DIRS="/bin /etc /home /var/local /usr/local/bin /usr/lib /var/www"
BACKUP=/tmp/backup.$$
NOW=$(date +"%Y-%m-%d")
INCFILE="/root/tar-inc-backup.dat"
DAY=$(date +"%a")
FULLBACKUP="Mon"
## Your MySQL Settings ##
MUSER="root"
MPASS="tupassword"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
## Your FTP server Settings ##
FTPD="//backup-directory-on-ftp-server"
FTPU="ftp-usuario"
FTPP="ftp-password"
FTPS="ftp.server.address"
NCFTP="$(which ncftpput)"
## Your Email Address ##
EMAILID="tuemail@tudominio.com"
## Backup our DPKG Software List ##
dpkg --get-selections > /etc/installed-software-dpkg.log
## Start the Backup for the file system ##
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :
## Check if we want to make a full or incremental backup ##
if [ "$DAY" == "$FULLBACKUP" ]; then
  FTPD="//full-backups"
  FILE="MyServer-fs-full-$NOW.tar.gz"
  tar -zcvf $BACKUP/$FILE $DIRS
else
  i=$(date +"%Hh%Mm%Ss")
  FILE="MyServer-fs-incremental-$NOW-$i.tar.gz"
  tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS
fi
## Start the MySQL Database Backups ##
## Get all the MySQL databases names ##
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=$BACKUP/mysql-$db.gz
 $MYSQLDUMP --single-transaction -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
## Check the Date for Old Files on FTP to Delete ##
REMDATE=$(date --date="30 days ago" +%Y-%m-%d)
## Start the FTP backup using ncftp ##
ncftp -u"$FTPU" -p"$FTPP" $FTPS<<EOF
cd $FTPD
cd $REMDATE
rm -rf *.*
cd ..
rmdir $REMDATE
mkdir $FTPD
mkdir $FTPD/$NOW
cd $FTPD/$NOW
lcd $BACKUP
mput *
quit
EOF
## Find out if ftp backup failed or not ##
if [ "$?" == "0" ]; then
 rm -f $BACKUP/*
 mail  -s "MYSERVER - BACKUP SUCCESSFUL" "$EMAILID"
else
 T=/tmp/backup.fail
 echo "Date: $(date)">$T
 echo "Hostname: $(hostname)" >>$T
 echo "Backup failed" >>$T
 mail  -s "MYSERVER - BACKUP FAILED" "$EMAILID" <$T
 rm -f $T
fi

scripts bash imprescindibles de un sysadmin

 

Crear nuevos usuarios en linux
#!/bin/bash
# Script que agrega usuarios a Linux
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

 

Backup de la base de datos con script bash
#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/midominio.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

 

Script que aporta información variada del sistema
#!/bin/bash
# scripts bash imprescindibles de un sysadmin linux
# Description   : Información del sistema: nombre de host, espacio en disco, 
#                 memoria, tiempo de actividad y usuarios activos.
# Display hostname of the system.
displayHostName() {
    echo -e "${FOREGROUND_COLOR}${BACKGROUND_COLOR}*** IMFORMACION DEL HOSTNAME ***${DEFAULT_COLOR}"
    hostnamectl
    echo ${BLANK_SPACE}
}
# Display disk space usage of the system.
displayDiskSpace() {
    echo -e "${FOREGROUND_COLOR}${BACKGROUND_COLOR}*** ESPACIO UTILIZADO EN EL DISCO ***${DEFAULT_COLOR}\n"
    df -h
    echo ${BLANK_SPACE}
}
# Display free and used memory of the system.
displayMemory() {
    echo -e "${FOREGROUND_COLOR}${BACKGROUND_COLOR}*** USO DE LA MEMORIA ***${DEFAULT_COLOR}\n"
    free
    echo ${BLANK_SPACE}
}
# Display uptime and load of the system.
displayUpTime() {
    echo -e "${FOREGROUND_COLOR}${BACKGROUND_COLOR}*** ACTIVIDAD Y CARGA DEL SISTEMA ***${DEFAULT_COLOR}\n"
    uptime
    echo ${BLANK_SPACE}
}
# Display active users on the system.
displayUsers() {
    echo -e "${FOREGROUND_COLOR}${BACKGROUND_COLOR}*** USUARIOS ACTIVOS ***${DEFAULT_COLOR}\n"
    who
    echo ${BLANK_SPACE}
}
echo -e "\e[96m================================================\n"
echo -e "\tMostrar información del sistema\n"
echo -e "================================================\e[0m\n"          
echo "Script que muestra información actualizada del sistema."
echo -e "---------------------------------------------------------"
# List options available to the user.
echo -e "\nPuedes optener informacion de las siguientes opciones."
echo -e "(1):\t Display Mostrar nombre del host"
echo -e "(2):\t Display Mostrar espacio en disco"
echo -e "(3):\t Display Mostrar la memoria"
echo -e "(4):\t Display Mostrar tiempo de actividad y carga"
echo -e "(5):\t Display Mostrar usuarios activos"
echo -e "(6):\t Display Mostrar todas las opciones\n"
FOREGROUND_COLOR="\e[97m"
BACKGROUND_COLOR="\e[104m"
DEFAULT_COLOR="\e[0m"
BLANK_SPACE=""
INPUT="s"
while [[ ${INPUT} = "s" ]]
do
    # Prompt the user to choose an option.
    read -p "Selecciona que informacion quieres ver (1-6): " CHOICE
    case ${CHOICE} in 
        1)
            displayHostName
            echo ${BLANK_SPACE};;
        2)
            displayDiskSpace
            echo ${BLANK_SPACE};;
        3)
            displayMemory
            echo ${BLANK_SPACE};;
        4)
            displayUpTime
            echo ${BLANK_SPACE};;
        5)
            displayUsers
            echo ${BLANK_SPACE};;
        6)
            displayHostName
            displayDiskSpace
            displayMemory
            displayUpTime
            displayUsers
            echo ${BLANK_SPACE};;
        *)
            echo -e "You must enter a number between 1-6 ONLY.\n";;
    esac
    # Prompt user if they wish to continue running the script or end it.
    echo "Quieres continuar? Pulsa 'S' o 'N'."
    read INPUT
    if [[ ${INPUT} = "n" ]];
    then
        echo -e ${BLANK_SPACE}
        
    elif [[ ${INPUT} = "s" ]];
    then    
        echo ${BLANK_SPACE}
        continue
    fi
done
exit 0

 

Script bash para servidores con Plesk

Un script que nosotros utilizamos habitualmente como tarea de mantenimiento, en nuestros servidores con el panel de control Plesk, es el siguiente.

#liberaPlesk.sh
#!/bin/bash
echo "<---------------------------------------------------------->"
echo "<---------------------------------------------------------->"

echo "Comprobando estado de memoria"
free
echo "OK - Comprobacion completada"
echo "<---------------------------------------------------------->"

sleep 2s; echo “Limpieza de memoria cache y swap“;
echo "<---------------------------------------------------------->"

sleep 2s; echo "Deshabilitando HTTP"
killall -KILL httpd
echo "OK - Http deshabilitado"
echo "<---------------------------------------------------------->"

sleep 1s; echo "Deshabilitando Swap"
swapoff -a
echo "OK - Swap deshabilitado"
echo "<---------------------------------------------------------->"

sleep 2s; echo "Liberando pagecaches, dentries e inodes"
sync;sysctl -w vm.drop_caches=3;sync
echo "OK - Server liberado"
echo "<---------------------------------------------------------->"

sleep 3s; echo "Habilitando la Swap"
swapon -a
echo "OK - Swap habilitado"
echo "<---------------------------------------------------------->"

sleep 3s; echo "Habilitar HTTP, reinciar MariaDB y Nginx"
systemctl restart mariadb.service
sleep 2s; service nginx restart
sleep 3s; service httpd start
echo "OK - Http habilitado"
echo "<---------------------------------------------------------->"

sleep 3s; echo "Habilitando Memcached"
chkconfig memcached on
service memcached restart
echo "OK - Memcached habilitado"
echo "<---------------------------------------------------------->"
#service ddos restart
sleep 2s; echo "Comprobacion rutinaria"
echo "Script liberadorPLESK sh"
echo "https://www.sololinux.es"
echo "<---------------------------------------------------------->"

sleep 2s; free
echo ".....MANTENIMIENTO FINALIZADO....."
echo "<---------------------------------------------------------->"
echo "<---------------------------------------------------------->"

Nota final: No te olvides de modificar los datos o valores segun corresponda con tus servicios y requerimientos.

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este artículo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales. Los scripts bash imprescindibles de un sysadmin linux.

 

Agregar comentario