-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathdomains-check.sh
More file actions
executable file
·97 lines (88 loc) · 2.93 KB
/
domains-check.sh
File metadata and controls
executable file
·97 lines (88 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
#
# domains-check.sh
# Copyright (C) 2013 Esteban De La Fuente Rubio (esteban[at]delaf.cl)
#
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública General GNU publicada
# por la Fundación para el Software Libre, ya sea la versión 3
# de la Licencia, o (a su elección) cualquier versión posterior de la misma.
#
# Este programa se distribuye con la esperanza de que sea útil, pero
# SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
# MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
# Consulte los detalles de la Licencia Pública General GNU para obtener
# una información más detallada.
#
# Debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa.
# En caso contrario, consulte <http://www.gnu.org/licenses/gpl.html>.
#
#
# Script que permite verificar cambios en la IP de un grupo de dominios y
# ejecutar un conjunto de comandos asociados a cada dominio en caso que dichos
# dominio haya cambiado su IP.
#
# Se debe crear un archivo para cada dominio, con el nombre del archivo el
# nombre del dominio. En cada archivo colocar, por cada línea, el comando que
# se desea ejecutar en caso que el dominio cambie de IP.
#
# Por ejemplo para verificar el dominio edward.sytes.net y reiniciar nginx en
# caso de que cambie crear en el directorio de los dominios el archivo
# edward.sytes.net con el contenido:
# /etc/init.d/nginx restart
#
# Se puede programar con CRON usando algo similar a (ajustar rutas):
# * * * * * /root/domains-check/domains-check.sh /root/domains-check/domains
#
# directorios para almacenar las ips y logs
DIR_IPS=/var/cache/domains-check
DIR_LOG=/var/log/domains-check
# verificar parámetro pasado
if [ $# -ne 1 ]; then
echo "Modo de uso:"
echo " $0 <directorio con dominios>"
exit 1
fi
# si se pasa el parámetro "clean" se borran directorios
if [ "$1" == "clean" ]; then
rm -rf $DIR_IPS
rm -rf $DIR_LOG
echo "Directorios limpiados"
exit 0
fi
# verificar que el directorio que se indicó exista
if [ ! -d $1 ]; then
echo "Directorio $1 no existe"
exit 1
fi
# crear directorios (por si no existen)
mkdir -p $DIR_IPS
mkdir -p $DIR_LOG
# nombre del archivo para log
LOG="$DIR_LOG/domains-check_`date +"%Y%m%d"`"
# procesar cada uno de los dominios
for DOMAIN in `ls $1`; do
TIME=`date +"%Y-%m-%d %H:%M:%S"`
IP_NEW=`dig +short $DOMAIN | tail -1`
if [ $? -ne 0 ]; then
echo "$TIME: dig $DOMAIN falló! omitiendo" >> $LOG
continue
fi
echo "$TIME: $DOMAIN tiene la IP $IP_NEW" >> $LOG
if [ -f $DIR_IPS/$DOMAIN ]; then
IP_OLD=`cat $DIR_IPS/$DOMAIN`
else
IP_OLD="sin ip"
fi
# ejecutar cada uno de los comandos asociados al dominio en caso que
# la ip haya cambiado
if [ "$IP_OLD" != "$IP_NEW" ]; then
echo "$TIME: tenía la IP $IP_OLD" >> $LOG
echo -n $IP_NEW > $DIR_IPS/$DOMAIN
echo "$TIME: ejecutando comandos" >> $LOG
cat $1/$DOMAIN | while read CMD; do
$CMD >> $LOG
done
fi
done