Actualizado el sábado, 11 enero, 2020
Script bash que avisa del estado de un servidor
Si quieres estar siempre informado del estado del hardware de tu servidor o PC linux, en este articulo te propongo una solución. Con este sencillo script bash recibirás por mail los datos del estado de tu sistema.
El script nos aportara la siguiente información:
- General: Hora del sistema, Ip del sistema, Kernel Linux.
- Hardware: Tipo y modelo de procesador, Numero de procesadores o nucleos.
- Memoria RAM: Mem total, Mem que usas, Mem libre.
- Memoria SWAP: Mem total, Mem que usas, Mem libre.
- Uso de Disco: Sistema de ficheros, Tamaño, Usados, Disponible, Uso, %, Montado en.
- More Info: Uptime, Usuarios conectados, Procesos, Carga de procesador.
- LAMP: Procesos MySQL, Procesos Apache, Peticiones Apache.
- Puertos abiertos: SSH, Apache, POP3, IMAP, MySQL (Busca los puertos por defecto).
El script bash:
Para poder identificar los puertos abiertos debes tener instalado Nmap, así que si no lo tienes instalado te recomiendo que lo hagas… es una excelente aplicación.
En Centos y derivados:
yum install nmap
En Debian, Ubuntu y derivados:
apt-get install nmap
Una vez instalado nmap abrimos la consola / terminal shell y escribimos…
nano estado.sh
Ahora copia y pega en estado.sh, lo siguiente:
#!/bin/bash echo "************************ [General] ****************************" echo " " echo " Hora: " `date '+%m-%d-%y %H:%M:%S'` echo " IPs: " `ifconfig | grep "inet addr:" | cut -f2 -d":" | cut -f1 -d" "` echo " Kernel: " `uname -r` echo " " echo "************************ [Hardware] ***************************" echo " " echo " Procesador: " `cat /proc/cpuinfo | grep "model name" | uniq | cut -f2 -d":"` echo " Núm.Prosd/nucleos: " `cat /proc/cpuinfo | grep processor | wc -l` echo " " echo "*********************** [Memoria RAM] **************************" echo " " echo " Memoria total: " `free -m | grep Mem | awk '{print $(2)}'` Mb. echo " Memoria usada: " `free -m | grep Mem | awk '{print $(3)}'` Mb. echo " Memoria free: " `free -m | grep Mem | awk '{print $(4)}'` Mb. echo " " echo "********************** [Memoria SWAP] **************************" echo " " echo " Memoria total: " `free -m | grep Swap | awk '{print $(2)}'` Mb. echo " Memoria used: " `free -m | grep Swap | awk '{print $(3)}'` Mb. echo " Memoria free: " `free -m | grep Swap | awk '{print $(4)}'` Mb. echo " " echo "********************** [Uso de Disco] **************************" disco=`df -h` echo -e "-- Disco --\r\n$disco\r\n\r\n" echo "************************** [More Info] *************************" echo " " echo " Uptime: " `uptime | cut -f4 -d" "` días echo " Usuarios conectados: " `w | wc -l` echo " Procesos: " `ps aux | wc -l` echo " Carga de procesador: " `uptime | awk '{print $(NF - 2), $(NF - 1), $NF}'` echo " " echo "************************ [LAMP] ********************************" echo " " echo " Procesos MySQL : " `mysql -N -uuser -ppassword -e "show processlist" | grep -v Sleep | wc -l` echo " Procesos Apache: " `ps aux | grep apache | wc -l` echo " Peticiones Apache: " `netstat -an | grep :80 | wc -l` echo " " echo "********************* [Puertos abiertos] ***********************" echo " " echo " (22) SSH: " `nmap localhost -p 22 | grep 22 | cut -f2 -d" "` echo " (80) Apache: " `nmap localhost -p 80 | grep 80 | cut -f2 -d" "` echo " (110) POP3: " `nmap localhost -p 110 | grep 110 | cut -f2 -d" "` echo " (143) IMAP: " `nmap localhost -p 143 | grep 143 | cut -f2 -d" "` echo " (3306) MySQL: " `nmap localhost -p 3306 | grep 3306 | cut -f2 -d" "` echo " " echo "****************************************************************"
Guarda el archivo y sal de nano.
Ejecuta el script bash:
bash estado.sh
Obtendrás un resultado similar a:
************************ [General] **************************** Hora: 08-07-17 11:44:02 IPs: Kernel: 3.10.0-514.26.2.el7.x86_64 ************************ [Hardware] *************************** Procesador: Intel Core Processor (Haswell, no TSX) Núm.Procesadores: 2 *********************** [Memoria RAM] ************************** Memoria total: 5665 Mb. Memoria usada: 916 Mb. Memoria free: 3689 Mb. ********************** [Memoria SWAP] ************************** Memoria total: 0 Mb. Memoria used: 0 Mb. Memoria free: 0 Mb. ********************** [Uso de Disco] ************************** -- Disco -- S.ficheros Tamaño Usados Disp Uso% Montado en /dev/sda1 25G 5,5G 19G 24% / devtmpfs 2,8G 0 2,8G 0% /dev tmpfs 2,8G 0 2,8G 0% /dev/shm tmpfs 2,8G 8,4M 2,8G 1% /run tmpfs 2,8G 0 2,8G 0% /sys/fs/cgroup tmpfs 567M 0 567M 0% /run/user/0 ************************** [More Info] ************************* Uptime: días Usuarios conectados: 3 Procesos: 98 Carga de procesador: 0,32, 0,21, 0,12 ************************ [LAMP] ******************************** ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES) Procesos MySQL : 0 Procesos Apache: 11 Peticiones Apache: 31 ********************* [Puertos abiertos] *********************** (22) SSH: closed (80) Apache: open (110) POP3: open (143) IMAP: open (3306) MySQL: open ****************************************************************
También lo puedes descargar directamente en tu servidor desde la consola.
wget https://www.sololinux.es/public/estado.sh
O descargar en tu pc, desde aquí.
Por ultimo creas una tarea cron para que te envíe un mail con la info del servidor.
Ejemplo:
05 * * * * /home/user/monitor.sh | /usr/bin/mail -s "Monitor [`/bin/hostname`]" mail@dominio.com
Si tienes dudas sobre las tareas cron, visita este articulo.
hola buenos días, tu scripts es muy bueno, me pareció una manera muy rápida de recolectar información de un servidor o un sistema linux por eso lo modifique y le agrege varias cosas para mejorarlo.
#!/bin/bash
#
echo «************************ [General] ****************************»
echo » »
echo » Sistema operativo: » `lsb_release -d`
echo » nombre del Equipo: » `hostname`
echo » Hora del sistema: » `date ‘+%m-%d-%y %H:%M:%S’`
echo » Hora de la bios: » `hwclock –show`
echo » Nombre de la interfaz: » `ip route get 1.2.3.4 | awk ‘{print $5}’`
echo » IP: » `ip route get 1.2.3.4 | awk ‘{print $7}’`
echo » Kernel: » `uname -r`
echo » inicio del sistema: » `who -b`
echo » »
echo «*********************** [ usuarios con terminal] **************************»
echo » »
echo » usuarios con terminal: » `grep -r «bash» /etc/passwd`
echo » »
echo «*********************** [super usuarios] **************************»
echo » »
echo » super usuarios: » `grep -r «:0:» /etc/passwd`
echo » »
echo «************************ [Hardware] ***************************»
echo » »
echo » Procesador: » `cat /proc/cpuinfo | grep «model name» | uniq | cut -f2 -d»:»`
echo » Núm.Prosd/nucleos: » `cat /proc/cpuinfo | grep processor | wc -l`
echo » »
echo «*********************** [Memoria RAM] **************************»
echo » »
echo » Memoria total: » `free -m | grep Mem | awk ‘{print $(2)}’` Mb.
echo » Memoria usada: » `free -m | grep Mem | awk ‘{print $(3)}’` Mb.
echo » Memoria free: » `free -m | grep Mem | awk ‘{print $(4)}’` Mb.
echo » »
echo «********************** [Memoria SWAP] **************************»
echo » »
echo » Memoria total: » `free -m | grep Swap | awk ‘{print $(2)}’` Mb.
echo » Memoria used: » `free -m | grep Swap | awk ‘{print $(3)}’` Mb.
echo » Memoria free: » `free -m | grep Swap | awk ‘{print $(4)}’` Mb.
echo » »
echo «********************** [Uso de Disco] **************************»
disco=`df -h`
echo -e «– Disco –\r\n$disco\r\n\r\n»
echo «************************** [More Info] *************************»
echo » »
echo » Uptime: » `uptime | cut -f4 -d» «` días
echo » Usuarios conectados: » `w | wc -l`
echo » Procesos: » `ps aux | wc -l`
echo » Carga de procesador: » `uptime | awk ‘{print $(NF – 2), $(NF – 1), $NF}’`
echo » »
echo «********************* [Puertos abiertos] ***********************»
echo » »
echo » (22) SSH: » `nmap localhost -p 22 | grep 22 | cut -f2 -d» «`
echo » (80) Apache: » `nmap localhost -p 80 | grep 80 | cut -f2 -d» «`
echo » (110) POP3: » `nmap localhost -p 110 | grep 110 | cut -f2 -d» «`
echo » (143) IMAP: » `nmap localhost -p 143 | grep 143 | cut -f2 -d» «`
echo » (3306) MySQL: » `nmap localhost -p 3306 | grep 3306 | cut -f2 -d» «`
echo » (10000) webmin: » `nmap localhost -p 10000 | grep 10000 | cut -f2 -d» «`
echo » (5432) potsgresql: » `nmap localhost -p 5432 | grep 5432 | cut -f2 -d» «`
echo » (123) ntp: » `nmap localhost -p 123 | grep 123 | cut -f2 -d» «`
echo » (137) netbios-ns: » `nmap localhost -p 137 | grep 137 | cut -f2 -d» «`
echo » (138) netbios-dgm: » `nmap localhost -p 138 | grep 138 | cut -f2 -d» «`
echo » (139) netbios-ssn: » `nmap localhost -p 139 | grep 139 | cut -f2 -d» «`
echo » (445) microsoft-ds: » `nmap localhost -p 445 | grep 445 | cut -f2 -d» «`
echo » (3128) proxy : » `nmap localhost -p 3128 | grep 3128 | cut -f2 -d» «`
echo » »
echo «****************************************************************»
Gracias por el aporte.