Tecnico
Publicado por Pablo (2 intervenciones) el 13/04/2009 01:06:01
Hola!
Estoy armando un pequeño script para monitorear un directorio de mi FTP server, para de esta manera cada vez que hay una nueva adicion en este directorio me llegue un mail avisando.
Esto parece funcionar con el script que voy a pegar a continuacion, en todos los casos excepto cuando el nombre del archivo que agrego tiene espacios.
**************************************************************************************************************
**************************************************************************************************************
Lo proximo que probe, fue algo similar pero en vez de usar un "for" use un "while read". En este caso, no funciona de ninguna manera, ya que siempre detecta todos los archivos como nuevos y manda un mail por cada corrida del programa. Copio el codigo a continuacion.
**************************************************************************************************************
**************************************************************************************************************
Desde ya muchisimas gracias por la ayuda!!
Saludos.
Pablo.-
Estoy armando un pequeño script para monitorear un directorio de mi FTP server, para de esta manera cada vez que hay una nueva adicion en este directorio me llegue un mail avisando.
Esto parece funcionar con el script que voy a pegar a continuacion, en todos los casos excepto cuando el nombre del archivo que agrego tiene espacios.
**************************************************************************************************************
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
#!/bin/bash
###Este programa verifica originalmente todo lo que se sube por medio de FTP a un directorio, le cambia los permisos para que no pueda ser borrado y notifica al administrador que se subio un archivo.###
#Powered By: Pablo Scheri under GPL License
# Changes:
# V1.0, 04 Abril 2009, Initial release
##########################################################################################
##Definicion de variables
#Directorio a monitorear:
monitdir=/home/trend/upload
tempdir=/home
#Notificaciones:
rcpt="pabloscheri@hotmail.com"
subject="Nuevo upload"
emailmessage="/tmp/emailbody.txt"
#Datos FTP
ftpserver=**********
ftpipaddr=`ifconfig eth0 | grep addr: |cut -d " " -f 12 | cut -d ":" -f 2`
ftpuser=*********
ftppassword=*********
##########################################################################################
#loop infinito
while [ "0" = "0" ]; do
#Listado del contenido a monitorear
ls -N $monitdir > $tempdir/nuevo-upload.txt
#Para cada linea del nuevo listado lo comparo con cada linea del viejo listado y cada archivo que no existe lo escribo en nuevos.txt
for nuevo in `cat $tempdir/nuevo-upload.txt`; do
flag=false
for viejo in `cat $tempdir/viejo-upload.txt`;do
if [ "$nuevo" = "$viejo" ]; then
flag=true
fi
done
if [ "$flag" = false ]; then
echo $nuevo >> $tempdir/nuevos.txt
fi
done
#Si no existen neuvos archivos, no hace falta seguir con el programa
if [ -f $tempdir/nuevos.txt ]; then
#Para cada linea de nuevos.txt definido mas arriba verifico si ese archivo aun se esta subiendo para no cortar la transmicion por el cambio de permisos
for nuevosarchivos in `cat $tempdir/nuevos.txt`;do
until [ $tamanoorg = $tamanonuevo ];do
tamanoorg=$(ls -l "$monitdir/$nuevosarchivos" | cut -d ' ' -f 5 )
sleep 2
tamanonuevo=$(ls -l "$monitdir/$nuevosarchivos" | cut -d ' ' -f 5 )
done
#Cambio de permisos y owner para que no se puedan borrar los archivos una vez subidos
chown pablos:trend "$monitdir/$nuevosarchivos" -R
chmod 750 "$monitdir/$nuevosarchivos" -R
#Se agrega el nombre del archivo a la lista vieja para que no vuevla a ser tomado en cuenta
echo $nuevosarchivos >> $tempdir/viejo-upload.txt
done
#Se genera el body del mensage y se envia el mail
echo "Se han agregado los siguientes archivos al FTP:" > $emailmessage
cat $tempdir/nuevos.txt >> $emailmessage
echo """
Recuerde los datos de logueo:
Server: $ftpserver <$ftpipaddr>
User: $ftpuser
Password: $ftppassword
Tu amigo:
Pablo.
PD: no olvides compartir en la carpeta Upload!""" >> $emailmessage
nail -s "$subject" "$rcpt" < $emailmessage
rm $tempdir/nuevos.txt
fi
#El Script vuelve a correr cada 5 minutos
sleep 300
done
**************************************************************************************************************
Lo proximo que probe, fue algo similar pero en vez de usar un "for" use un "while read". En este caso, no funciona de ninguna manera, ya que siempre detecta todos los archivos como nuevos y manda un mail por cada corrida del programa. Copio el codigo a continuacion.
**************************************************************************************************************
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
#!/bin/bash
###Este programa verifica originalmente todo lo que se sube por medio de FTP a un directorio, le cambia los permisos para que no pueda ser borrado y notifica al administrador que se subio un archivo.###
#Powered By: Pablo Scheri under GPL License
# Changes:
# V1.0, 04 Abril 2009, Initial release
##########################################################################################
##Definicion de variables
#Directorio a monitorear:
monitdir=/home/trend/download
tempdir=/home
#Notificaciones:
rcpt="pabloscheri@hotmail.com"
subject="Nuevo download"
emailmessage="/tmp/emailbody.txt"
#Datos FTP
ftpserver=*******
ftpipaddr=`ifconfig eth0 | grep addr: |cut -d " " -f 12 | cut -d ":" -f 2`
ftpuser=******
ftppassword=*******
##########################################################################################
#loop infinito
while [ "0" = "0" ]; do
#Listado del contenido a monitorear
ls -N $monitdir > $tempdir/nuevo-download.txt
#Para cada linea del nuevo listado lo comparo con cada linea del viejo listado y cada archivo que no existe lo escribo en nuevos.txt
# for nuevo in `cat $tempdir/nuevo-download.txt`; do
cat $tempdir/nuevo-download.txt | while read nuevo; do
flag=false
# for viejo in `cat $tempdir/viejo-download.txt`;do
cat $tempdir/viejo-download.txt | while read viejo; do
if [ "$nuevo" = "$viejo" ]; then
flag=true
fi
done
if [ "$flag" = false ]; then
echo $nuevo >> $tempdir/nuevos-download.txt
fi
done
#Si no existen neuvos archivos, no hace falta seguir con el programa
if [ -f $tempdir/nuevos-download.txt ]; then
#Para cada linea de nuevos.txt definido mas arriba verifico si ese archivo aun se esta subiendo para no cortar la transmicion por el cambio de permisos
for nuevosarchivos in `cat $tempdir/nuevos-download.txt`;do
#Se agrega el nombre del archivo a la lista vieja para que no vuevla a ser tomado en cuenta
echo $nuevosarchivos >> $tempdir/viejo-download.txt
done
#Se genera el body del mensage y se envia el mail
echo "Se han agregado los siguientes archivos al FTP:" > $emailmessage
cat $tempdir/nuevos-download.txt >> $emailmessage
echo """
Recuerde los datos de logueo:
Server: $ftpserver <$ftpipaddr>
User: $ftpuser
Password: $ftppassword
Tu amigo:
Pablo.
PD: no olvides compartir en la carpeta Upload!""" >> $emailmessage
nail -s "$subject" "$rcpt" < $emailmessage
rm $tempdir/nuevos-download.txt
fi
#El Script vuelve a correr cada 5 minutos
sleep 3
done
**************************************************************************************************************
Desde ya muchisimas gracias por la ayuda!!
Saludos.
Pablo.-
Valora esta pregunta


0