Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Sistemas Operativos: Qué es, cómo se configura el Cron, el programador de tareas de Linux
Linux


Os explicamos qué es el cron y cómo se configura. Cron es el programador de tareas para ejecución automática en un momento del tiempo definido por el usuario. Crontab es el fichero donde se aloja la configuración establecida para el Cron. Os mostramos cómo configurarlo en GNU Linux Ubuntu, aunque es muy similar para el resto de las distribuciones GNU Linux.



 

Definición de Cron y crontab, el programador de tareas de GNU Linux

El cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o scripts a intervalos regulares de tiempo (personalizable por el usuario). El cron es el equivalente en Windows al Programador de tareas. En el caso de Windows, la configuración del programador de tareas se guarda en el Registro de configuaciones.

Los procesos que deben ejecutarse ó scripts y la hora y día en la que deben hacerlo se indican en el archivo crontab. Por lo tanto crontab es un archivo de GNU Linux donde se guardan las distintas tareas programadas de los usuarios.

Los ficheros que componen el Cron se encuentran normalmente en:

/etc

Las carpetas del Cron son: cron.d, cron.hourly, cron.daily, cron.monthly, cron.weekly:

El cron crontab de GNU Linux - Ficheros de crontab

Los ficheros crontab de cada usuario se almacenan en la carpeta:

/var/spool/cron/crontabs

En esta carpeta "especial" habrá un fichero con el nombre de usuario, para los que hayan programado alguna tarea en el cron de GNU Linux:

El cron crontab de GNU Linux - Ficheros de crontab

Nota: esta carpeta puede variar en función de la distribución de GNU Linux.

 

Seguridad en el Cron

En GNU Linux podremos indicar qué usuarios podrán ejecutar tareas programadas en el cron y qué usuarios no podrán hacerlo. Para indicar los usuarios que no podrán utilizar el cron los añadiremos en el fichero:

/etc/cron.d/cron.deny

Si no existe el fichero podremos crearlo con "nano" ó "vi" o cualquier editor de texto plano, con el comando:

nano /etc/cron.d/cron.deny

El cron crontab de GNU Linux - Creación del fichero cron.deny

Añadiremos los nombres de los usuarios que NO podrán utilizar el Cron (tareas programadas de GNU Linux), uno por cada línea, por ejemplo: alonso, fernando, fernando.alonso:

El cron crontab de GNU Linux - Creación del fichero cron.deny

Para indicar los usuarios que sí podrán utilizar el cron los añadiremos al fichero:

/etc/cron.d/cron.allow

De la misma forma que para el fichero cron.deny.

Una forma sencilla de administrar estos dos ficheros es la siguiente, en el fichero cron.deny ponemos una única línea:

ALL

El cron crontab de GNU Linux - Creación del fichero cron.deny

De esta forma denegamos el uso de cron a todos los usuarios. A continuación, en el fichero cron.allow pondremos los usuarios a los que queramos permitir el uso de cron:

El cron crontab de GNU Linux - Creación del fichero cron.allow

Con esta configuración los usuarios "fernando", "ajpdsoft" y "kronxito" podrán utilizar el cron para programar tareas, el resto de usuarios del sistema GNU Linux no tendrá permisos.

Nota: todas las configuraciones anteriores deberemos hacerlas (a ser posible) con el superusuario root.

 

El servicio cron

Para que las tareas programadas en los ficheros crontab se ejecuten a la hora y día indicados deberá existir un demonio (daemon) que será el encargado de comprobar segundo a segundo si tiene que ejecutar alguna tarea programada. Este servicio se puede iniciar con el comando:

sudo /etc/init.d/cron start

y detener con el comando:

sudo /etc/init.d/cron stop

Por defecto, el sistema GNU Linux iniciará este servicio en el arranque de forma automática.

Nota 1: la ubicación de los servicios /etc/init.d puede variar dependiendo de la distribución de GNU Linux, en algunas se encuentran en /etc/rc.d/init.d.

Nota 2: el nombre del servicio del cron puede variar, en algunas distribuciones de GNU Linux se suele llamar "crond".

 

Desactivar el inicio automático del demonio del cron

Para desactivar el inicio automático del servicio del cron, evitando así que se ejecuten las tareas programadas (salvo que iniciemos el servicio de forma manual) ejecutaremos el siguiente comando:

sudo update-rc.d -f cron remove

El cron crontab de GNU Linux - Desactivar el inicio automático del demonio del cron

Al ejecutarse este comando, el sistema devolverá algo así:

root@ubuntu:/etc# update-rc.d -f cron remove
Removing any system startup links for /etc/init.d/cron ...
/etc/rc1.d/K11cron
/etc/rc2.d/S89cron
/etc/rc3.d/S89cron
/etc/rc4.d/S89cron
/etc/rc5.d/S89cron

 

Activar el inicio automático del demonio del cron

Para activar el inicio automático del servicio del cron, para que se ejecuten las tareas programadas, ejecutaremos el siguiente comando:

sudo update-rc.d cron defaults

El cron crontab de GNU Linux - Activar el inicio automático del demonio del cron

Al ejecutarse este comando, el sistema devolverá algo así:

root@ubuntu:/etc# update-rc.d cron defaults
Adding system startup for /etc/init.d/cron ...
/etc/rc0.d/K20cron -> ../init.d/cron
/etc/rc1.d/K20cron -> ../init.d/cron
/etc/rc6.d/K20cron -> ../init.d/cron
/etc/rc2.d/S20cron -> ../init.d/cron
/etc/rc3.d/S20cron -> ../init.d/cron
/etc/rc4.d/S20cron -> ../init.d/cron
/etc/rc5.d/S20cron -> ../init.d/cron

 

Los ficheros y carpetas que componen el cron

Las carpetas que utiliza la utilidad cron de GNU Linux son:

  • /etc/cron.hourly: en esta carpeta se guardarán los script que se ejecutarán cada hora.
  • /etc/cron.daily: en esta carpeta se guardarán los script que se ejecutarán cada día.
  • /etc/cron.weekly: en esta carpeta se guardarán los script que se ejecutarán cada semana.
  • /etc/cron.monthly: en esta carpeta se guardarán los script que se ejecutarán cada mes.

El fichero para el superusuario root (o el del propio sistema) será:

/etc/crontab

Para el resto de usuarios, sus ficheros de cron se guardarán en la siguiente carpeta, uno por cada usuario (con su nombre):

/var/spool/cron/crontabs

En la carpeta:

/etc/cron.d

se almacenarán los dos ficheros de seguridad del cron, tal y como hemos explicado anteriormente.

 

Cómo manipular las tareas programadas en el cron - crontab de GNU Linux

A continuación os explicamos cómo programar una tarea en el cron de GNU Linux. Para ello utilizaremos el comando GNU Linux "crontab". Este comando tiene la siguiente sintaxis:

usage:  crontab [-u user] file
        crontab [-u user] { -e | -l | -r }
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)

Mostrar crontab de un usuario

Por ejemplo, para mostrar las tareas programadas del usuario "alonso" ejecutaremos el siguiente comando:

sudo crontab -u alonso -l

El cron crontab de GNU Linux - Mostrar el crontab de un usuario

Eliminar crontab de un usuario

Para eliminar el fichero crontab del usuario ajpdsoft y con ello todas sus tareas programadas ejecutaremos el comando:

sudo crontab -u ajpdsoft -r

En este ejemplo, hacemos un ls -lah en la carpeta /var/spool/cron/crontabs, nos devolverá los ficheros de los usuarios que tengan activado el cron, en nuestro ejemplo "ajpdsoft" y "alonso". Tras ejecutar el comando anterior (para eliminar el crontab de un usuario), al volver a hacer un ls -lah ya no aparecerá el fichero del usuario:

El cron crontab de GNU Linux - Eliminación del fichero crontab de un usuario

Añadir nueva tarea programada al crontab

Para añadir una tarea programada para un usuario concreto realizaremos los siguientes pasos:

1. En primer lugar iniciaremos la sesión con el usuario al que queramos añadir una nueva tarea programada. Para ello, si hemos abierto una ventana de terminal, iniciaremos sesión con el comando:

su - nombre_usuario

2. A continuación ejecutaremos el comando:

crontab -e

(si estamos utilizando una distribución GNU Linux Ubuntu nos abrirá el crontab de ese usuario con el editor "nano")

Añadiremos las tareas programadas que consideremos, una por cada línea, por ejemplo:

30 15 * * 6 /sbin/shutdown -r now

(esta tarea programada se ejecutará una vez a la semana, los sábados a las 15:30 y reiniciará el equipo)

El cron crontab de GNU Linux - Añadir nueva tarea programada crontab

Al guardar los cambios en el fichero crontab y cerrar el editor nano, si hemos cometido algún error de sintaxis nos mostrará un mensaje como este:

El cron crontab de GNU Linux - Añadir nueva tarea programada crontab

Con el texto:

crontab: installing new crontab
"/tmp/crontab.rmbXXD/crontab":1: bad hour
errors in crontab file, can't install.
Do you want to retry the same edit?

Configuración de las tareas programadas en el fichero crontab

Para añadir una nueva tarea programada tendremos que tener en cuenta la sintaxis utilizada por cron, que es la siguiente:

xx xx xx xx x xxx

  • Uno o dos dígitos numéricos para indicar los minutos (0-59).
  • Uno o dos dígitos numéricos para la hora (0-23).
  • Uno o dos dígitos numéricos para indicar el día o días del mes (1-31).
  • Uno o dos dígitos numéricos para indicar el mes (1-12).
  • Un dígito numérico para indicar el día de la semana (0-6). Siendo:
    • 1 = Lunes.
    • 2 = Martes.
    • 3 = Miércoles.
    • 4 = Jueves.
    • 5 = Viernes.
    • 6 = Sábado.
    • 0 = Domingo.
  • El comando o script que se ejecutará cuando se cumpla la programación.

Cosas a tener en cuenta:

  • En todos los casos anteriores, para especificar todos los valores posibles utilizaremos un asterisco "*".
  • Para ejecutar una tarea cada 10 minutos lo haremos de la siguiente forma:

0,10,20,30,40,50 * * * * /script.sh

En el ejemplo anterior, el fichero de script script.sh se ejecutará todos los días, todas las horas, cada 10 minutos.

  • Para ejecutar una tarea los días 10, 15, y 25 de cada mes a las 22:30:

30 22 10,15,25 * * /script.sh

  • Para ejecutar una tarea programada los lunes, miércoles, viernes y domingos a las 15:30:

30 15 * * 1,3,5,0 /script.sh

  • Si editamos directamente el fichero /etc/crontab con el superusuario root, debemos indicar, además de lo anterior, con qué usuario querremos ejecutar la tarea programa. Por ejemplo, para la anterior tarea:

30 15 * * 1,3,5,0 /script.sh

Deberemos indicar el usuario con que se ejecutará el script script.sh, de la siguiente forma:

30 15 * * 1,3,5,0 ajpdsoft /script.sh

Donde "ajpdsoft" es el nombre del usuario (que ha de existir y tener permisos de ejecución del script script.sh).

Ejemplos de tareas programadas en el crontab de GNU Linux

  • En este ejemplo vamos a explicar cómo realizar un script que haga una copia de seguridad de nuestros datos en un fichero comprimido. En primer lugar crearemos este fichero, utilizando "nano", "vi" o cualquier otro editor de texto plano:

nano copia_seguridad_diaria.sh

Como ejemplo del contenido de este fichero, podría ser:

cd /datos/facturacion
tar czf * copia_seguridad_facturacion.tar
cp copia_seguridad_facturacion.tar /copiaseguridad

Guardaremos el fichero copia_seguridad_diaria.sh. Para hacerlo un fichero ejecutable deberemos ejecutar el siguiente comando:

chmod 700 copia_seguridad_diaria.sh

Una vez preparado el script, añadiremos la tarea programada con el comando:

crontab -e

En el ejemplo, programaremos la tarea para que se ejecute a las 22:00 los lunes, martes, miércoles, jueves y viernes de la semana, indicando que sea el superusuario root quien la ejecute, la tarea quedará así:

00 22 * * 1,2,3,4,5 root /copia_seguridad_diaria.sh

También serviría indicar los días en la forma 1-5:

00 22 * * 1-5 root /copia_seguridad_diaria.sh

Nota: en este ejemplo, hemos indicado que será el superusuario root quien ejecute la tarea, obviamente esto sólo será posible si estamos añadiendo la tarea con este usuario.

  • Con la siguiente tarea programada realizaremos una copia de seguridad mediante export de nuestra base de datos Oracle y lo transferiremos mediante FTP a otro equipo de nuestra LAN. En primer lugar crearemos el fichero de script export_oracle.sh con el contenido:

export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
exp system/contraseña_system file=/copia_bd_export/bd.dmp log=/copia_bd_export/bd.log full=y
ftp -n -u < /oracle/ftp.in > /oracle/ftp.out

Este script de ejemplo realiza un exportación completa de la base de datos de Oracle Database completa a la carpeta "copia_bd_export" y al fichero "bd.dmp". También envía, mediante FTP, este fichero a otro equipo de la red, utilizando el fichero ftp.in con el siguiente contenido:

open 192.168.1.125
user Administrador contraseña_administrador
bin
prompt
lcd /copia_bd_export
mput bd.dmp
bye

En este caso, la tarea la programaremos para que se ejecute los domingos, a las 15:00:

00 15 * * 0 /export_oracle.sh

 

Artículos relacionados

 

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del proyecto AjpdSoft.


Anuncios


Enviado el Lunes, 02 marzo a las 03:45:30 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A