systemadmin.es > Utilidades > Como programar tareas con el cron

Como programar tareas con el cron

Para programar tareas repetitivas cada cierta hora o cierto intervalo de tiempo se puede usar el cron. Vamos a ver como usarlo.

Para editar o listar las tareas del cron lo podemos hacer mediante el comando crontab. Para listar las tareas se usa el modificador -l:

$ crontab -l

Para editar las tareas es con el modificador -e:

$ crontab -e

Y para eliminarlas con el -r:

$ crontab -r

En el caso de root podemos usar estos comandos para cualquier usuario simplemente indicando mediante -u el nombre de este:

# crontab -l -u sphinx

Una vez dentro del cron para indicar cada cuanto queremos ejecutar una tarea tenemos 5 elementos:

0 0 * * * /var/qmail/bin/qmail-scanner-queue.pl -z

En la siguiente imagen tenemos una chuleta para editar el cron:

Chuleta para editar el cron

Chuleta para editar el cron

Unos ejemplos de tareas en el cron son las siguientes:

Cada dia a las 0:00:

0 0 * * * /var/qmail/bin/qmail-scanner-queue.pl -z

Cada domingo a las 6:30:

30 6 * * 0 /usr/local/bin/optimize.mysql.sh

Para definir intervalos de tiempo podemos utilizar el /intervalo, por ejemplo:

Cada 5 minutos:

*/5 * * * * /usr/bin/denyhosts.sh

Cada 4 horas a en punto:

0 */4 * * * /usr/local/bin/mksnap

En este caso debemos tener cuidado con el siguiente:

* */4 * * * /usr/local/bin/mksnap

Ya que esto significa: “Cada minuto de la hora cada cuatro horas” por lo que cada 4 horas se ejecutaría cada minuto de esa hora.

Para indicar algunas horas sueltas sin intervalo sería, por ejemplo a las 2:00, a las 3:00 y a las 7:00 podemos separar los elementos por comas:

0 2,3,7 * * * /usr/local/bin/mksnap

6 comments to “Como programar tareas con el cron”

  1. Puede ser interesante saber donde se guardan los ficheros de crontab de los usuarios para poder incluirlos en las copias de seguridad. En Debian están en /var/spool/cron/crontabs/

  2. En el caso de CentOS estan en:

    # ls /var/spool/cron/
    jprats  nagios  root
    

    Y en el /etc tenemos lo siguiente, pero su sintaxis difiere, ya que debemos indicar el usuario:

    cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/
    

    Esto para otro día 🙂

  3. Y como se haría para crear un cron job directamente desde ssh?, gracias de antemano.

  4. Y en el caso de que queramos ejecutar cron una vez al día pero de forma aleatoria, es decir, un dia a las 13:28, otro a las 21:00, otro a las 05:42,etc.

    ¿cron es tan flexible como para darle un rango?

    Gracias

  5. Puedes hacer el script que use la variable $RANDOM para decidir si se ejecuta o no, dejando en el cron que se ejecute a cada minuto

  6. Hola, cuando ejecuto este cron me sale el siguiente error
    35 10 * * * /etc/cron.d/mkdirmonitor.sh
    -bash: 1: command not found

    y cuando ejecuto este otro:
    35 10 * * * root /etc/cron.d/mkdirmonitor.sh
    -bash: 35: command not found

    Puedes ayudarme, muchas gracias.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>