Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Comandos de tiempo: date y cron

Mejoras para hacer copias de seguridad:
Copia de seguridad que no fuera completa. Que se base en fechas para respetar copias antiguas. Tal vez te interese hacer copias mensuales para periodos largos.

Se suele hacer copias diarias lunes/marte/miercoles/.../dominngo basandote en el dia de la semana.

Se suele hacer copias mensuales, basandote en el nombre del mes (12 copias en un año)

No hacer copias completa, sino basandose en copias de fecha de ficheros que han sido modificados.
(copias incrementales: añadir solo lo nuevo). Se hace 1 copia inicial, y luego se hacen pequeñas copias con los cambios, problema que tiene es que dependen de la copia inicial y de todos los cambios para restaurar.

Otra forma seria procesar solo lo que haya cambiado basandose en la fecha pero se copia TODO, pero los ficheros que se han borrado los tengo que gestionar (en la copia existen, pero en el original los he borrado)

Comandos que nos pueden venir muy bien, ya que estan relacionados en la fechas:

date”: fecha y hora actual del sistema
julio@julio-Aspire-5735:~$ date
lun mar 21 09:57:33 CET 2011
julio@julio-Aspire-5735:~$

Si somos usuarios root con el comando date, podemos asignar la hora/fecha del sistema
$date MMDDHHmmYY.ss
ver la pagina del man para ver le tema de los formatos (%)
$date +%a
muestra el dia de la semana abreviatura (lun), en mayusculas muestra +%A (lunes)
otro ejemplo (uso de comillas):
$ date +"%d %B"
21 marzo


cal”: calendario
$cal
mes completo actual
$cal -m 2
mes completo de hace 2 meses
$cal 2012
calendario del año 2012

calendar”: sucesos que se produjeron hoy
tira de un fichero llamado /usr/share/calendar/calendar.all
pero tu te puedes crear tu propio archivo el ~/.calendar/calendar y ~/calendar, para anotar cosas personales (cumpleaños, fiestas, etc)
la forma de hacer una entrada es:
LANG=utf-8
3/21<tab>vieron los libros
mes/fecha<tabulador>comentario

Si ejecutamos calendar donde hemos grabado nuestro archivo calendar.

Ahora solo salen nuestras entradas.

Para hacer que nuestro calendario se añada al calendario completo, /usr/share/calendar/calendar.all

En nuestro calendario añado todas la entradas que me interesen calendar.all
ejemplo:
LANG=utf-8
#include <calendar.birthday>
3/21<tab>vieron los libros

at”: comando que es nuestro primer programador de tareas
at 11:13 (ENTER)
at>notify-send “hola”
at>^D

(tenemos que instalar previamente: $sudo apt-get install libnotify-bin)
ejemplo completo del uso de notify-send:
notify-send "Ingresa el titulo aquí" \
"Chequea estos iconos" \
-i /usr/share/pixmaps/gnome-home.png
)
Uso de at con ficheros:
$at 11:13 -f fichero
donde fichero tiene las ordenes de lo que tiene que hacer.

atq”: muestra la lista de trabajos programados
julio@julio-Aspire-5735:~/.calendar$ atq
7 Mon Mar 21 12:00:00 2011 a julio
julio@julio-Aspire-5735:~/.calendar$

"atrm" nº: borro algun trabajo de la lista de tareas configurado por un nº

batch: te sirve para ejecutar tareas en las cuales no te importa la hora en que se ejecute. Lo ejecutara cuando el nivel de carga del sistema lo permita.
Nivel de carga del sistema lo podemos ver con el comando top: ver “load average:” siendo 3 valores, y una carga de 1 es el 100%. El primer numero en la carga en el ultimo minuto, el 2º en reciente (5 minutos), y 3º numero la carga a mas largo plazo.
Si batch ve que estamos en el 80%, aplaza la tarea.

cron”: cronometro del sistema. Podemos programar cosas en el tiempo.
Va comprobando la tabla de tareas que tiene asignada periodicamente cada minuto, haciendola si corresponde. El programa se llama “crond”, ya que es un demonio (servicio que esta en ejecución, cuando se arranca la máquina).
Con:
$crontab -l //vemos la lista de tareas
Ahora con nano, creamos un archivo llamado “crontab.txt”, para definirles tareas.
  • cada tarea se describe en una linea, y esa linea esta compuesta por 6 campos:
    minutos horas dia mes diasemana tarea
    21 13 1 1 * echo “hola”
    el dia 1 de enero a las 13 horas 21 minutos (sin especificar dia de las semana) se escribe “hola”

Ejemplo: Tarea del Cigarrito oclok:
30 10 * * 1-5 notify-send “salir de clase fumar el cigarrito”
dias de la semana 0 domingo, 1 lunes, 2 martes,3 miercoles,4 jueves, 5 viernes,6 sabado, 7 domingo

Para indicar rangos usamos “-” (guión)
Para indicar numeros sueltos “,” (comas)
Todos “*”

Más opciones que tenemos:
  • Indicar todos los dias pares: 2-31/2 (desde el 2 al 31 aumentando de 2 en 2)
  • Indicar algo cada 5 dias: 1-31/5 (desde el 1 al 31 aumentando de 5 en 5)
  • Indicando todos los dias impares: 1-31/2 (desde el 1 al 31 aumentando de 2 en 2)

Hacer copias de seguridad:
30 10 * * 1-5 notify-send "salir de calse para fumar el cigarrito"
0 13 * * 1-5 notify-send "salir de clase para fumar el cigarro"
30 13 * * 1-5 copia_diaria
35 13 * * 5 copia_semanal (que copia la copia_diaria y lo cambie de semanal)
40 13 20-26 * 5 copia_mes (copia semanas y que lo copie con nombre de mensual)

Nota: 
Cron en principio, no tiene acceso a la terminal ni a la pantalla, para que lo tenga:
Cualquier cosa que  crom tenga que ejecutarse en un entorno de pantalla de un usuario debe de tener el la linea de la orden:
export DISPLAY=:0.0; notify-send "----"  // pantalla
export DISPLAY=:0,0; gnome-terminal; // terminal

ejemplo:
30 13 * * 1-5 export DISPLAY=:0.0; notify-send "Hoy se hacen copias de seguridad"

Se lo pasamos a crontab:
$crontab < crontab.txt

No hay comentarios:

Publicar un comentario