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

