Por Paco Aldarias Raya

Programar tareas: cron

Por Paco Aldarias Raya

Impreso: 2 de mayo 2007

Email: pacolinux arroba inicia punto es

Web: http://aldarias.es/pacodebian

Con Linux Debian. En Valencia (España)

El documento tiene version .html, y .pdf, cambiando en el navegador la parte final podrás acceder a ambos.

Este documento es de libre reproducción siempre que se cite su fuente.

Realizado con: LATEX


Índice General

1 Introducción

Explicaremos como realizar ciertas tareas de forma automatica. Para ello utilizaremos el demonio cron.

2 Instalar cron

Como root:
apt-get install cron

3 Elementos a tener en cuenta

- Crond: Demonio q hay q arrancarlo al inicio.

- Crontab: Se le indica cuando y q hacer.

4 Ficheros

- Logs del cron: /var/log/cron

- Configuracion del cron: /etc/crontb

- Ver q se ejecuta: /var/log/messages

5 Cambiar el editor por defecto

En el fichero /etc/profile y poner la linea:

export VISUAL=/bin/nano

6 Como hacer un script q se ejecute cada 5 minutos

Nota: Este script esta hecho para saber que conexiones tengo a internet establecidas: netstat -atu | grep ESTA

- Lo debe hacer cada 5 minutos.

- Guardarlo en un historico

- Anote el dia y la hora se creo el netstat.

- El historico se crea nuevo segun el dia.

Pasos:

1. Crear el fichero: netstat.sh

Creo el fichero: /home/paco/mislog/netstat.sh

Que contenga esto:

#!/bin/bash
cd /mnt/hdd/pagina/logs/            
	# Voy a guardar los ficheros en /mnt/hdd/pagina/logs
date >> netstat-$(date +%d-%m-%Y).txt
	# Anoto la fecha de hoy a la hora
cat netstat.txt >> netstat-$(date +%d-%m-%Y).txt
	# Meto el netstat en el historico
netstat -tupan | grep ESTA > netstat.txt
	# Obtengo el nuevo.

Le damos permisos de ejecución:

chmod 755 /home/paco/mislog/netstat.sh

7 Programa la ejecucion del scripts netstat.h en el historico

En /etc/crontab añado la linea
0-59/5 * * * * paco /home/paco/mislog/netstat.sh

Ejecuta el fichero /home/paco/mislog/netstat.sh cada 5 minutos. El usuario seria paco

8 Repasemos conceptos

1.- Deberías usar una tabla cron para cada usuario.

La ubicación de estas tablas (crontabs) es, en mi sistema, /var/cron/tabs. En este directorio te creas una tabla llamada como el usuario, (p.ej. root para el usuario root :)). Puedes hacerlo simplemente copiando /etc/crontab a /var/cron/tabs/root

2.- Editas esta tabla haciendo login como el usuario (en nuestro caso root) haciendo crontab e

3. Quita todas las líneas de cron (del estilo 1 1 * * * lo-que-sea) que no te interesen para que sólo haga lo que quieres.

4. Inserta una línea según el formato del cron: min. hora dia-mes mes dia-semana línea-comando
0 8 * * * lo-que-quieras-ejecutar
Esto ejecutaría "lo-que-quieras-ejecutar" a las 8 de la mañana todos los dias de todos los meses. (el *, evidentemente, quiere decir "siempre" ;)).

5.- Si lo que quieres es hacerlo cada tres horas usa el campo hora de la siguiente forma 8,11,14,17,20,23,2,5
(hay una forma de hacerlo sin tanto número, pero es mas largo de explicar y realmente da igual)

6.- y... OK! ya está lista la automatización de la tarea.

9 Mas cosas

Mira man crontab
En /etc/crontab
añade 00 */3 * * * root script

de esta forma cada 3 horas cuando los minutos sean 0 se ejecutará.

También podrías poner 00 0,3,6,9,12,15,18 * * * root script Así se ejecuta a las 0:00 3:00 6:00, etc Las lineas del crontab son A B C D E usuario script A=Minutos B=Horas C=Dia del mes D=Mes E=Dia de la semana

Se tienen que cumplir las cinco condiciones para que se ejecute.

Si pones dia de la semana, dia del mes y mes, el script solo se ejecutara si estamos en esa fecha y ademas el dia de la semana coincide.

IMPORTANTE: Si es la ultima linea del fichero no olvides el return, ya que de lo contrario no funciona.

10 Podria tambien funcionar este script

#!/bin/sh
while :

do
  sleep 60*60*3   # no me apetece multiplicar :)
  cosa_a_hacer
done

Y se llama con: ./script

Sobre este documento...

Programar tareas: cron

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html cron -split 0 -local_icons 1 -show_section_numbers -no_auto_link -no_navigation

The translation was initiated by Paco on 2007-05-02


Paco 2007-05-02