Crontab

De Wikillano
Saltar a: navegación, buscar

Si no tenemos cron instalado en nuestra máquina:

apt-get install cron

Todas las tareas que queramos ejecutar las deberemos añadir al fichero crontab que podemos ejecutar mediante

crontab -e

Si queremos que el editor cambia a nuestro editor favorito cuando ejecutamos crontab -e haremos los siguiente:

>#export EDITOR=/usr/bin/vi

en mi caso para que el editor sea el vi

Introducción

Cron tiene soporte multiusuario, esto quiere decir que cada usuario tiene su fichero crontab sin interferir entre ellos, los podemos encontrar en /var/spool/cron/crontabs logeandonos como root.

También es posible añadir tareas directamente al archivo /etc/crontab la diferencia entre los otros crontabs es que deberemos añadir el usuario que ejecutará la tarea.

En los ficheros crontab podemos añadir las siguiente variables:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin...
MAILTO=root
HOME=/

Cron también lo podemos reiniciar o para como cualquier otro demonio

/etc/init.d/cron start

Formato de las tareas

Todas las tareas tiene un formato común, compuesto por:

minutos horas días mes día comando

Siendo minutos el minuto exacto en que va a ejecutarse en la hora definida en horas, días y mes. día un día especifico de la semana pudiendo utilizar un valor numérico o sus iniciales, siendo 1 para el Lunes, hasta el 6 para el sábado y 0 para el domingo, y por último comando que es la ruta al programa o script a ejecutar.

Si en lugar de insertar valor para alguna de las variables, utilizamos el carácter *, estamos indicando que se ejecute para todos los valores posibles, de esta manera podemos ejecutar una tarea todos los días y meses.

ejemplos:

10 0 * * * /usr/local/sbin/script.sh

A las 00:10 de todos los días de la semana en todos los meses se ejecute script

30 13 * * 1 /usr/bin/who >> /usr/local/usuariosConectados.txt

Todos los Lunes a las 13:30 se guarda en el archivo todos los usuario conectados a la máquina.

*/15 * * * * /usr/local/sbin/script.sh

Cada 15 minutos todos los días meses ejecutariamos el script

Por otro lado si editamos el fichero /etc/crontab debemos añadir el usuario como:

10 0 * * * david /usr/local/sbin/script.sh

el usuario debe tener permisos para realizar la tarea a parte de tenerlos para ejecutar cron. Asignar Permisos

Si queremos controlar el uso de cron por parte de los usuarios, debemos crear los ficheros cron.allow y cron.deny dentro del directorio /etc

cron.allow paral os usuario con permisos, cron.deny para los que denegamos su uso.

Para hacerlo más fácil podemos denegar su uso a todo el mundo añadiendo ALL al cron.deny

echo ALL >> /etc/cron.deny

y después añadir a los usuario que si tiene permiso:

echo david >> /etc/cron.allow


el comando at

[ballano@box ~]$ at midnight
warning: commands will be executed using /bin/sh
at> echo "hola que tal"
at> <EOT>
job 5 at Tue Dec 23 00:00:00 2008


El comando at se diseño para ejecutar una tarea una vez en un momento especifico, las tareas o trabajos de at en debian estan guardados en /var/spool/cron/atjobs

pluton:/var/log# dpkg -L at
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/at
/usr/share/doc/at/copyright
/usr/share/doc/at/changelog.gz
/usr/share/doc/at/changelog.Debian.gz
/usr/share/doc/at/readme.txt.gz
/usr/share/doc/at/Problems
/usr/share/doc/at/timespec
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/at.1.gz
/usr/share/man/man5
/usr/share/man/man5/at.allow.5.gz
/usr/share/man/man8
/usr/share/man/man8/atd.8.gz
/usr/bin
/usr/bin/at
/usr/bin/batch
/usr/sbin
/usr/sbin/atd
/etc
/etc/at.deny
/etc/init.d
/etc/init.d/atd
/etc/pam.d
/etc/pam.d/atd
/var
/var/spool
/var/spool/cron
/var/spool/cron/atspool
/var/spool/cron/atjobs
/usr/share/man/man1/atq.1.gz
/usr/share/man/man1/atrm.1.gz
/usr/share/man/man1/batch.1.gz
/usr/share/man/man5/at.deny.5.gz
/usr/bin/atq
/usr/bin/atrm

dentro podemos ver el trabajo que creamos arriba del todo:

pluton:/var/spool/cron/atjobs# ls -rlt
total 4
-rwx------ 1 root daemon 671 2008-12-22 20:54 a000050138cd44
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
SSH_CLIENT=192.168.1.2\ 47262\ 22; export SSH_CLIENT
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
MAIL=/var/mail/root; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; export PATH
PWD=/var/spool/cron/atjobs; export PWD
LANG=es_ES.UTF-8; export LANG
PS1=\\h:\\w\\\$\ ; export PS1
SHLVL=1; export SHLVL
HOME=/root; export HOME
LOGNAME=root; export LOGNAME
SSH_CONNECTION=192.168.1.2\ 47262\ 192.168.1.4\ 22; export SSH_CONNECTION
OLDPWD=/var/spool/cron; export OLDPWD
cd /var/spool/cron/atjobs || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
echo "hola que tal"
  • atq

Podemos ver las colas de trabajo

  • atrm

borramos trabajos encolados,

pluton:/var/spool/cron/atjobs# atq
6	Tue Dec 23 00:00:00 2008 a root
5	Tue Dec 23 00:00:00 2008 a root

con atrm 6 borrariamos el job número 6


Chuleta-crontab1.png gracias: http://sliceoflinux.files.wordpress.com

Herramientas personales