Crontab

De Wikillano

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


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


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

Herramientas personales