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
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.
He usado el script en bash «Crear nuevos usuarios en linux» sobre xubuntu 16.04 y 20.04 y el usuario se me crea correctamente. Pero a la hora de pedir que se introduzca la contraseña, en el mismo emulador del terminal aparece «script.sh: 5: read: Illegal option -s»
Saludos