Cambiar nombre del Host sin reiniciar en CentOS/RedHat – Linux

Este procedimiento deberia funcionar en las distribuciones RedHat Linux 7.x/9, RHEL, Fedora y CentOS sin problemas porque todas tienen similar configuración. El objetivo es nunca reiniciar sin necesidad y mantener el tiempo de uptime del servidor intacto y por supuesto no interrumpir los otros servicios.

  1. Abrimos una consola como usuario root.
  2. Editar el archivo network y cambiar el nombre del host en la variable HOSTNAME.
    nano /etc/sysconfig/network
    HOSTNAME=central
  3. Adicionar  el número ip del nuevo host.
    nano /etc/hosts
    192.168.0.1 central

    Las modificaciones realizadas en /etc/hosts y /etc/sysconfig/network son necesarias para que los cambios sean permanentes.
  4. Cambiar el nombre del host usando el comando hostname.
    hostname redhat9
  5. y ejecutar nuevamente el comando hostname sin incluir el host para ver el cambio.
    hostname
  6. Finalmente reiniciar el servicio de red para aplicar los cambios realizados.
    service network restart
  7. Para verificar que el nombre del host fue realmente cambiado debemos salir e ingresar nuevamente a la sesión. Con cerrar la terminal y abrir otra terminal veremos que el nombre ha cambiado.

Rápido, sin problemas y no interrumpimos los servicios del servidor ni tampoco perdemos el uptime de nuestro servidor.

Script para optimizar tablas InnoDB en MySQL

Cuando utilizamos MySQL es común optimizar tablas con muchos registros con cierta periodicidad, esto para solventar problemas de fragmentación, entre otros. La verdad esta es una de las cosas del modelo de PostgreSQL que echo en falta, quizás no es tan “amigable” pero todo queda claro desde el inicio.

En PostgreSQL hay un proceso de aspiradora (vacuum) que va eliminando periódicamente registros inutilizados en tablas, su configuración, pan nuestro de cada día para un admin de BBDD que debe ajustarlo con frecuencia.

Bueno…. Volviendo a MySQL, si necesita optimizar tablas InnoDB, lo mejor que puede utilizar son ALTER nulos, estas son instrucciones DDL de tipo ALTER sin parámetros que permiten seguir trabajando con las BBDD, porque realiza copias temporales en disco. La cuestión es que esta herramienta “reconstruye” la tabla y elimina, entre otros, los problemas de fragmentación.

Aquí les dejo un script para optimizar de “un sólo golpe” varias tablas InnoDB:

#!/bin/bash
 
if [ $# -lt 2 ]; then
        echo "You must specify database host"
        echo "Eg. script.sh MY_DATABSE 192.168.10.1"
        exit
fi
 
db="$1"
host="$2"
user="root"
declare -a tables=(Table1 Table2 Table3)
 
stty -echo
read -p "Enter MySQL's Admin password: " password
stty echo
 
for table in ${tables[@]}; do
        echo $table &&
        time mysql -u $user --password=$password -h $host $db -e "ALTER TABLE $table ENGINE=INNODB"
done

Básicamente optimizamos las tablas especificadas (en un arreglo) e imprimimos el tiempo que toma cada instrucción (time).

Si tiene la certeza de que todas las tablas de una BD son InnoDB y quiere optimizarlas todas aún más rápido, puede hacerlo valiéndose del comando “show tables”…

#!/bin/bash
 
if [ $# -lt 2 ]; then
        echo "You must specify database host"
        echo "Eg. script.sh MY_DATABSE 192.168.10.1"
        exit
fi
 
db="$1"
host="$2"
user="root"
 
stty -echo
read -p "Enter MySQL's Admin password: " password
stty echo
 
mysql -u $user --password=$password -h $host --batch --skip-column-names $db -e "SHOW TABLES" |
while read table; do
        echo $table &&
        time mysql -u $user --password=$password -h $host $db -e "ALTER TABLE $table ENGINE=INNODB"
done

La única diferencia es que las tablas ya no son especificadas a través de un arreglo (que recomiendo para BBDD grandes, donde optimizar todas las tablas podría demorar toda la vida), sino que se toman directamente del comando “SHOW TABLES” para una BD especificada.

Actualizar y corregir permisos (UIDs) en Plesk

permisos-de-archivos

permisos-de-archivos

Tal vez os haya pasado, que tras copiar contenidos desde otro servidor Plesk, sobretodo cuando se hace con el comando rsync, se desajustan los nombres de usuario y grupo que tenian originalmente. Aqui dejamos un script en bash totalmente operativo que corrige todos estos permisos. Recordar esto es solo script en bash  para Plesk, funciona en cualquiera de sus versiones de Plesk en cualquier distribucion Linux, no tiene ninguna funcionalidad en otros entornos

#!/bin/bash
# Corrige los permisos de los archivos y directorios de los dominios
cat /etc/passwd |egrep vhos > /tmp/$$
wc=`wc -l /tmp/$$ |awk ‘{ print $1 }’ `
for i in `seq 1 $wc`
do
linea=`head -$i /tmp/$$ |tail -1`
user=`echo $linea |awk -F: ‘{ print $1}’`
home=`echo $linea |awk -F: ‘{ print $6}’`
echo “$user – $home”
#corrigiendo el home
chown root.root $home
chmod 755 $home
#corrigiendo el httpdocs y demas principales
for dir in httpdocs httpsdocs cgi-bin anon_ftp
do
if [ -d $home/$dir ];then
#el directorio
chown $user.psaserv $home/$dir
chmod 750 $home/$dir
#el contenido
chown $user.psacln $home/$dir/* -R
chmod 777 $home/$dir/* -R
fi
done
for dir in statistics subdomains web_users
do
if [ -d $home/$dir ];then
chown root.psaserv $home/$dir
chmod 755 $home/$dir
if [ -d $home/$dir/httpsdocs ];then
chown $user.psaserv $home/$dir/httpsdocs
chmod 750 $home/$dir/httpsdocs
chown $user.psacln $home/$dir/httpsdocs -R
chmod 777 $home/$dir/httpsdocs -R
fi
fi
done
done

No space left on device: mod_rewrite… Solución para servidor web Apache

servidor apache

servidor apache

En alguna ocasión me he topado con que al reiniciar Apache después de matar todos los procesos con killall -9 httpd el servidor Apache no quiere arrancar, Apache start [FALLA], dando en el log el error de más arriba. Se trata de que Apache no ha liberado recursos del sistema y debemos hacerlo nosotros. En concreto se trata de semáforos. Linux tiene dos comandos que me ayudan a hacer esto (ipcs e ipcrm). Por si acaso antes vamos a eliminar los procesos zoombie:

Ver procesos zoombie:

# ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’

Matar procesos zoombie (tardará un poco):

# kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Este es el error al reiniciar o arrancar Apache:

[crit] (28) No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed

Solución:

Revisar los semáforos de Apache

# ipcs -s | grep apache

Eliminamos todos los semáforos de los procesos de Apache

# ipcs -s | grep apache | perl -e ‘while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}’

Iniciar Apache

# service httpd start

Script para hacer backups de base de datos via SMB, indicando el número de días a respaldar

Hola amigos de blogofsysadmins aqui les dejo otro script en bash que uso para hacer backup de mis bases de datos Mysql en un servidor FreeNas via SMB (Samba), son bastante útiles si se ponen en un cron job y automaticamente hacer los respaldos por las noches o cuando querais¡¡

Cada uno ya que personalice el script base a sus necesidades

#!/bin/bash
Backup_dir_temp="/shellscripts/temp"
Work_dir="/shellscripts/workdir"
Mount_dir="//192.168.0.xxx/Backups/Web_Databases"
Backup_files="*.sql"
Days=7
Day=$(date +%F)


#Respaldamos nuestrass bases de datos(cabia los datos tus datos)
cd $Backup_dir_temp
mysqldump -uroot -pPassword Database_1 > Database_1_$Day.sql
mysqldump -uroot -pPassword Database_2 > Database_2_$Day.sql
mysqldump -uroot -pPassword Database_3 > Database_3_$Day.sql
mysqldump -uroot -pPassword Database_4 > Database_4_$Day.sql
mysqldump -uroot -pPassword Database_5 > Database_5_$Day.sql


Archive_file="Databases_Backup_$Day.zip"

#montamos Mount_dir via samba en Backup_dir
mount -t cifs //192.168.0.xx1/Backups/Web_Databases $Work_dir -o username=myUserName,password=myPassword

#Eliminanos el archivo mas viejo si ya se cumplieron "$Days" dias
# Contamos el numero de archivos que hay en el directorio de respaldo

file_count=`ls $Work_dir | wc -l`

# Comparamos si hay mas de $days archivos para borrar el mas viejo
if [ $file_count = $Days ]
then
cd "$Work_dir" && ls -tr | head -n 1 | xargs rm -f
echo "Removiendo el archivo mas viejo..."
else
echo ""
fi

#Creamos el archivo comprimido con todos los archivos sql 

zip -r "$Work_dir"/$Archive_file  $Backup_files

#Borramos el directorio temporal
rm -rf $Backup_dir_temp/*.*


#Desmontamos el directorio SMB 
umount $Work_dir