añadir fecha a registro de un script [SOLUCIONADO]

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3303
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

añadir fecha a registro de un script [SOLUCIONADO]

Mensaje por doc » Jue May 03, 2012 5:07 am

no se si el título es el más adecuado (ni si a estas horas de la noche de aquí, en España, ando con las ideas muy claras). Pero el caso es el siguiente:
He creado un script para lanzar copias de seguridad con RSync. Este:
#!/bin/sh
rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /home/doc/Historial_Backup
gedit /home/doc/Historial_Backup +8000:1
el caso es que me interesa el signo >> para que se vaya acumulando el 'historial' de cada 'sincronización' al archivo Historial_Backup, (y que, tras ejecutarse, me edite, con gedit, lo que ha hecho).

Pero me interesaba que, cada vez que se añada algo a ese archivo Historial_Backup, aparezca la fecha (así, al editar el 'historial', sepa en qué día (y hora) se hizo eso.

¿¿se puede hacer? (y, sobre todo... ¿es fácil de hacer?)

(y, también sobre todo... ¿he explicado bien lo que quiero?. Es que a las 3 y pico de la madrugada... no soy persona) :D :D
Última edición por doc el Jue May 03, 2012 8:50 pm, editado 1 vez en total.
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: añadir fecha a registro de un script

Mensaje por mcun » Jue May 03, 2012 5:13 am

Se nota que andas dormido que postaste le tema en gnome XD


Bueno para agregar la fecha solo tienes que llamar a la función date ahora no se por que llamas a gedit ? con cat no es suficiente ?
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: añadir fecha a registro de un script

Mensaje por neurus » Jue May 03, 2012 6:03 am

Se me ocurren dos formas, según sea lo que estás buscando (de lo que no me hice mucha idea).

Si quieres que el log quede algo así:

fecha dia hora etc
dato 1
dato 2
dato 3
etc
fecha otro día otra hora etc...

Entonces bastaría con añadir una entrada date al comienzo del script. En rigor, no se añadiría la fecha cada vez que envía un dato, sino cada vez que se inicia el script, pero en lapráctica es lo mismo.
Quedaría:

Código: Seleccionar todo

#!/bin/sh
date >> /home/doc/Historial_Backup
rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /home/doc/Historial_Backup
gedit /home/doc/Historial_Backup +8000:1
La otra posibilidad, es que cada línea tenga fecha. Para hacerlo, habría que enviar los datos a un archivo temporal, y luego añadir la fecha línea por línea. Así:

Código: Seleccionar todo

#!/bin/sh
rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /tmp/Historial_Backup
for i in $(cat /tmp/Historial_Backup); do  echo $(date) . . . . . . . . . . . . . . . . . . . . . $i >> /home/doc/Historial_Backup; done

#Tu ?ínea para abrir gedit en la última línea del archivo: "gedit /home/doc/Historial_Backup +8000:1"; ideada con el estilo de programación "me cago en la elegancia".
#Algo decente:

gedit /home/doc/Historial_Backup +$(cat /home/doc/Historial_Backup|wc -l):1

Otra cuestión es que los nombres de archivos podrían expresarse como variables (¿qué hace un mismo archivo mencionado ya tres veces en un script?, o que no estoy tan seguro de que gedit sea la mejor opción, a menos que quieras editar el archivo. Pero supongo que eso va en gustos.

Finalmente, puede que la salida por defecto de date no te guste mucho: mié may 2 23:11:40 ART 2012

Pero hay opciones (hace unos días me lo recordó Niky45, así que te disculpo si tampoco quieres leer el man): date +%D:%M , que permite muchas opciones, siempre que no uses espacios. Por ejemplo, date +%x............%H%M%S arroja esto:

Código: Seleccionar todo

02/05/12............23:17:09
Etc.
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3303
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: añadir fecha a registro de un script

Mensaje por doc » Jue May 03, 2012 2:31 pm

qué tal, maestros.
Bueno, ayer no se si me aclaré mucho. He intentado lo que me decis, y no me acaba de salir (la fecha me la pone solo al principio el archivo, y yo quiero que me aparezca 'en lada registro de ejecución. Sigo en ello, a ver si lo consigo, y aprendo un poquito mas.
A ver si lo explico mejor con un ejemplo, lo que quiero: y lo que quiero es lanzar Rsync para hacer copias de seguridad, y recoger lo que va haciendo en un archivo de texto 'Registro_Backup'. Algo así (en negrita y rojo pongo lo que quiero que salga... pero no sale)
2/5/12 22:30:45
sending incremental file list
Historial_Backup
Historial_Backup~

3/5/12 1:25:03
Registro_Backup
sent 616785 bytes received 2637 bytes 1238844.00 bytes/sec
total size is 71793599459 speedup is 115904.18
sending incremental file list

4/5/12 1:35:03
Registro_Backup
script_copyseg
script_copyseg~
sent 570949 bytes received 2414 bytes 1146726.00 bytes/sec
total size is 70711089117 speedup is 123326.91
sending incremental file list

4/5/12 10:25:03
Registro_Backup
Copia1/
deleting Copia1/viaje 040.jpg
deleting Copia1/viaje 035.jpg
deleting Copia1/viaje 027.jpg
deleting Copia1/viaje 026.jpg
deleting Copia1/viaje 025.jpg
deleting Copia1/prueba.pdf
deleting Copia1/Page2.pdf
deleting Copia1/Page 1.pdf
sent 570543 bytes received 2381 bytes 381949.33 bytes/sec
total size is 70685882181 speedup is 123377.42
sending incremental file list

(etc)
y así, más o menos, tengo un historial claro de lo que va sucediendo en mi copia de seguridad.

(¿para qué...? pues solo por curiosidad, así que tampoco es algo que me preocupe excesivamente, si alguien me da una idea de si se puede hacer, estupendo si no, no pasa nada.)

Y si, claro que debo leer los manuales. Y lo suelo hacer. Pero os aseguro que cada vez que hago un $ man [comando] se me cae el alma a los pies, porque, en general, está todo tan escueto que me cuesta aclararme. Vamos, que yo, más que manual, lo llamaría 'guía de referencia del comando'. ,Porque es que para entenderlo... hay que entender, previamente, mucho de comandos.

Venga, gracias por aguantar mi rollo...
Avatar de Usuario
niky45
Forista Ancestral
Forista Ancestral
Mensajes: 9186
Registrado: Jue Abr 12, 2007 7:00 am
Ubicación: tras la pantalla (...)
Contactar:

Re: añadir fecha a registro de un script

Mensaje por niky45 » Jue May 03, 2012 2:35 pm

doc escribió: Pero me interesaba que, cada vez que se añada algo a ese archivo Historial_Backup, aparezca la fecha (así, al editar el 'historial', sepa en qué día (y hora) se hizo eso.
solo desde tu script, o cada vez que lo "abras" (ej, con gedit)

lo segundo es mas complejo, lo del script, rapido, iria asi:

Código: Seleccionar todo

(echo -e "$(date)" >> /home/doc/Historial_Backup ) && (rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /home/doc/Historial_Backup )
gedit /home/doc/Historial_Backup +8000:1
los parentesis externos son para que lance en subshell y haga los direccionamientos correctamente. revisa el man de bash si no funciona (o ten paciencia que acabe de arreglar el portatil y pueda conseguir conexion desde casa :P )
#446716
>>"Linux: the operating system with a CLUE... Command Line User Environment".
(seen in a posting in comp.software.testing)

[ DNFD ] - [ F4A ] - [ dotfiles ]
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3303
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: añadir fecha a registro de un script

Mensaje por doc » Jue May 03, 2012 3:35 pm

¡Oleee...! ¡si señor...! (o señorita...) así si sale:
-e jue may 3 13:33:19 CEST 2012
sending incremental file list
Historial_Backup
Registro_Backup
Registro_Backup~
script2

sent 572833 bytes received 2431 bytes 1150528.00 bytes/sec
total size is 70683399921 speedup is 122871.24
-e jue may 3 13:34:26 CEST 2012
sending incremental file list
Historial_Backup
Música/
deleting Música/prueba.flac
deleting Música/prueba.ogg

sent 569973 bytes received 2379 bytes 381568.00 bytes/sec
total size is 70665544740 speedup is 123465.18
jue may 3 13:38:11 CEST 2012
sending incremental file list
Historial_Backup
script2
script2~

sent 570699 bytes received 2412 bytes 1146222.00 bytes/sec
total size is 70665545187 speedup is 123301.67
le he quitado el -e inicial, que como ves en la primera línea salia.
Gracias, Niki (y neurus, y mcun... que me haceis estudiar un poco el tema)

Ahora me toca estudiar
a) cómo cambiar el formato de fecha a otro más habitual (p. ej 'jue 3 may', o '3/5/12')
b) ver cómo puedo introducir una línea en blanco antes de la línea de la fecha, para que se destaque más (o, aún mejor, cómo puedo poner la línea de la fecha en negrita y, 'if posibol', en rojo u otro color que destaque.

Supongo que será fácil. Pero... como no voy a pasar ningún examen... 'se aceptan ayuditas' :D :D
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: añadir fecha a registro de un script

Mensaje por mcun » Jue May 03, 2012 3:49 pm

gedit es un editor de texto plano, por lo que no se si te sera posible añadir color, los colores y demás son de texto enriquecido, tal vez puedas ponerle
unos asteriscos al comienzo y final o lago así.

lo de la fecha ya te lo aclaro neurus date +%D:%M
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3303
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: añadir fecha a registro de un script

Mensaje por doc » Jue May 03, 2012 8:49 pm

efectivamente, lo puedo resolver, por ejemplo, con asteriscos. Me ha quedado algo así:
sent 955130 bytes received 2590 bytes 1915440.00 bytes/sec
total size is 70648641354 speedup is 73767.53
*****05/03/12:37*****
sending incremental file list
Historial_Backup
Historial_BackupOcultos
rsync
script_copyseg
script_copyseg_misocultos
script_copyseg_misocultos~
script_copyseg~

sent 572378 bytes received 2490 bytes 1149736.00 bytes/sec
total size is 70648642120 speedup is 122895.42
y, aunque tengo que dar algún retoque a la 'hora'... lo daremos por solucionado.

Gracias, maestros.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: añadir fecha a registro de un script [SOLUCIONADO]

Mensaje por neurus » Vie May 04, 2012 9:36 am

He intentado lo que me decis, y no me acaba de salir (la fecha me la pone solo al principio el archivo, y yo quiero que me aparezca 'en lada registro de ejecución. Sigo en ello, a ver si lo consigo, y aprendo un poquito mas.
¿Se te ocurrió leer lo que respondí? Digo, en una de esas hasta tiene relación con tu pregunta.

Me autocito:
La otra posibilidad, es que cada línea tenga fecha. Para hacerlo, habría que enviar los datos a un archivo temporal, y luego añadir la fecha línea por línea. Así:
(el resto lo buscas en el post correspondiente, que está en esta misma página)

También allí está respondido lo del formato de fecha:

date +%x..%H:%M:%S

Y para que aparezca en color, en Gedit, lo que puedes hacer es configurar Gedit para el resaltado de texto (ver-modo resaltado-marcado-html). Y le das a la fecha formato de comentario html. Es decir, en el script, donde dice

Código: Seleccionar todo

echo $(date) . . . . . . $i
Lo cambias por

Código: Seleccionar todo

echo "<!--$(date +%x..%H:%M:%S)-->. . . . . $i"
Que, dicho sea de paso, podrías darle formato html al archivo completo y abrirlo con un browser.

Ejemplo:

Código: Seleccionar todo

#!/bin/bash -x
rm /tmp/Historial_Backup
rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /tmp/Historial_Backup

for i in $(cat /tmp/Historial_Backup); do  echo "
<FONT COLOR=red>$(date +%x)</Font> . . . <FONT COLOR=BLUE><B>$i</B></FONT><br>" >> /home/doc/Historial_Backup ; done


chromium /home/doc/Historial_Backup
Y si te molesta que lo primero que se vea en el browser no sea la última línea ingresada, pasas el archivo por tac (cat al revés), así: tac Historial_Backup > arhivonuevo.html y abres ese archivonuevo.



Finalmente, aquí tienes algo mejor armado:

Código: Seleccionar todo

#!/bin/bash -x


rm /tmp/Historial_Backup

echo "<br><br><br><h1><FONT COLOR='red'>Iniciado: `date +%x....%H:%M:%S` </font></h1><br><br>">> Historial_Backup

rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> /tmp/Historial_Backup


while read line
	do echo "<FONT COLOR='green'>$(date +%x)</Font> . . . <FONT COLOR='BLUE'><B>$line</B></FONT><br>" >> /home/doc/Historial_Backup ; 
	done </tmp/Historial_Backup

echo "<br><br><h1><FONT COLOR='red'>Terminado: `date +%x....%H:%M:%S`</font></h1><br><br>">> Historial_Backup

tac /home/doc/Historial_Backup > .Historial_Backup_inv.html

iceweasel /home/doc/.Historial_Backup_inv.html

exit
Avatar de Usuario
doc
Forista Ancestral
Forista Ancestral
Mensajes: 3303
Registrado: Mié Ago 11, 2010 10:32 am
Ubicación: Oviedo-es_ES
Contactar:

Re: añadir fecha a registro de un script [SOLUCIONADO]

Mensaje por doc » Vie May 04, 2012 2:07 pm

caramba, neurus, este último script ha quedado perfecto, es una maravilla, le pongo como nombre 'script_neurus'.
Voy a tener que editar el título del post y poner [SUPERSOLUCIONADO]
Muchas gracias

(ahora, para seguir aprendiendo, voy a ver cómo se retoca un poco tu script, por ejemplo poniendo la fecha, en vez de con '%x', con dd/mm/AA. Es fácil, creo que es así:
%d/%m/%Y a las %X ¿no?
también voy a añadir la extensión HTML al archivo del Historial_Backup. para que clicandolo se me abra directamente en formato HTML, en el navegador.

(y dos preguntas finales, que soy bastante pardillo: ¿hay alguna forma más fácil de ejecutar los archivos bin/bash, que escribir, en consola (según he leido)
$ source [nombre_script]
(ahorro tipeos si fuese sh [nombre_script]

y... ¿qué significa la 'x' en el encabezamiento? (eso de #!/bin/bash -x )

Bueno, gracias por todo, me lo llevo para estudiarlo este fin de semana.
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: añadir fecha a registro de un script [SOLUCIONADO]

Mensaje por neurus » Sab May 05, 2012 5:29 pm

La primera pregunta, no sé si la entiendo.

¿Tú dices que escribes la ruta completa al script para ejecutarlo?. Yo guardo el script dentro de /usr/local/bin (no sé por qué en alguna versión de Debian el usuario no tiene permisos para acceder a ese directorio, y hay que cambiárselo). Por supuesto, debe estar en el path. Entonces, lo ejecuto llamándolo como a cualquier ejecutable: sólo por su nombre.

La -x puedes borrarla. Es un "modo depurador" que acepta Bash. Habrás notado que el script lanza más mensajes de lo normal. Eso es por la -x. Sirve para saber todo lo que está haciendo el script, y ver si falla en alguna parte. Siempre la uso con scripts más o menos largos cuando los voy a probar (a este lo probé reemplazando el comando principal, rsync, por ls -r directorio). A veces, me olvido de quitarla, es todo.

Nota: por las dudas, revisa el script y corrige esta ambigüedad.

Código: Seleccionar todo

echo "<br><br><br><h1><FONT COLOR='red'>Iniciado: `date +%x....%H:%M:%S` </font></h1><br><br>">> Historial_Backup
Es en los dos "echoes": iniciado y terminado, está el mismo error.

Eso funcionaría únicamente si ejecutas el script en el directorio correcto. Deberías reemplazarlo por /home/doc/Historial_Backup.

El mismo problema en la línea tac Historial...etc. Hay que poner rutas absolutas para asegurarse de que funcione siempre.

Mejor aún, si quieres dejarlo más prolijo, usa variables. Al principio del script determinas variables como
BACKUP= "/home/doc/Historial_Backup"
TEMP="/tmp/Historial_Backup"
etc.

Y luego reemplazas las ocurrencias según corresponda, con $TEMP, $BACKUP, etc.


En definitiva, por esto es mejor usar variables cuando se va a repetir muchas veces lo mismo. Además, es mucho más fácil luego cambiar las rutas, si uno necesita hacerlo, sin correr el riesgo de olvidarse de alguna línea.
Así queda corregido:

Código: Seleccionar todo

#!/bin/bash -x


TEMPFILE="/tmp/Historial_Backup"
HISTORIAL_PLANO="/home/doc/Historial_Backup"
HTML="/home/doc/.Historial_Backup_inv.html"



function HORA(){
  date +%H:%M:%S
}

function FECHA(){
  date +%x
}



rm $TEMPFILE

echo "<br><br><h1><FONT COLOR='red'>Iniciado: `FECHA` &nbsp;&nbsp;&nbsp; `HORA` </font></h1><br><br><br><HR width='90%'><br><br>">> $HISTORIAL_PLANO

rsync -av --delete /home/doc/* /media/Respaldo/Backup_home >> $TEMPFILE




while read line
	do echo "<FONT COLOR='green'>`FECHA`</Font> . . . <FONT COLOR='BLUE'><B>$line</B></FONT><br>" >> $HISTORIAL_PLANO ; 
	done <$TEMPFILE



echo "<br><br><h1><FONT COLOR='red'>Terminado: `FECHA` &nbsp;&nbsp;&nbsp; `HORA`</font></h1><br><br>">> $HISTORIAL_PLANO


tac $HISTORIAL_PLANO > $HTML
iceweasel $HTML

Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje