Hola,
El tema del manejo de
cron y
crontab es de relativa importancia para cualquier administrador o usuario de equipos con sistemas Unix. Trataré de darte una introducción simple sobre su utilización.
Antes que nada, es importante mencionar que el primer recurso disponible para aprender sobre diferentes aplicaciones comunes en Unix (como cron y crontab), es su documentación propia, que en muchos casos se puede acceder mediante los comandos man o info en una sesión de terminal corriente. A eso se refería nuestro amigo ||Dj||. Si tienes acceso a un equipo con algún sistema Unix y te encuentras en una sesión de terminal, puedes escribir:
o
para aprender más sobre estos comandos. Si no tienes acceso a este tipo de recursos directamente en una máquina determinada, puedes probar suerte y buscar en la web misma. Visita un motor de búsqueda como Google e ingresa "man cron" (o "cron manual" o cosas por el estilo) como términos de búsqueda. Usualmente encontrarás varias páginas en donde se publican estos mismos manuales de los que hemos hablado. Lamentablemente, toda esta información se encuentra disponible en su mayoría en Inglés.
Ahora bien, entrando en materia, hablemos un poco de cron y crontab.
cron y crontab son como tal un par de aplicaciones que ayudan a administrar y ejecutar una serie de comandos personalizables por el usuario. Estos comandos pueden ser básicamente cualquier aplicación ejecutable, de modo que puedes realizar tanto tareas de administración como cualquier otra cosa que desees. El modelo cron te permite controlar los horarios y el modo en que deseas que se ejecuten tus aplicaciones de forma flexible.
De manera básica, todo esto funciona más o menos así:
cron es un "daemonio" (o demonio, si quieres ser más cuidadoso con el castellano), una aplicación que está creada para que permanezca en la memoria de la máquina, ejecutándose en el "fondo" del sistema operativo mientras tu haces tus tareas normales. Este proceso, cron, constantemente realiza su arduo trabajo basado en el contenido de ciertos archivos "crontab", que son únicos para cada usuario de la máquina (de forma que cada usuario puede personalizar sus propios comandos), y que son cargados en memoria cuando cron inicia su ejecución. Cron luego está constantemente revisando de nuevo el material de los crontabs (cada minuto, usualmente), chequeando si hay algún comando que deba ser ejecutado en ese momento dado. Hay otras cosas que hace cron, pero no vale la pena discutirlo aquí.
Como te imaginarás, para un usuario regular, el proceso cron no resulta muy interesante, toda la magia se produce gracias a los mencionados archivos crontab. Allí es donde está la diversión. Un archivo crontab contiene instrucciones que deben ser atendidas y ejecutadas por cron, y estas referencias se escriben en cierto formato determinado que interpreta cron.
Usualmente la forma más fácil de editar estos archivos es mediante el comando "crontab" (un nombre muy acertado, diría yo). Algunos de los llamados a crontab más comunes son:
Esto te permitirá consultar el contenido del archivo crontab del usuario actual (el usuario bajo el que has iniciado tu sesión). Opcionalmente, si eres el administrador de la máquina (el todopoderoso `root'), puedes usar como argumento el nombre de algún usuario para consultar el crontab de ese usario en particular. Por ejemplo: crontab -l pepito
Esta forma de llamar al comando `crontab' es posiblemente la más útil. De esta forma puedes editar tu archivo de crontab actual. Dependiendo de la configuración de tu sistema, es posible que al ejecutar este comando se inicie una sesión en tu editor de texto favorito (vi, emacs, pico, etc) con el contenido actual del archivo crontab del usuario bajo el que has iniciado tu sesión. Allí tienes la opción de eliminar entradas antiguas, modificarlas o agregar nuevas entradas.
Cada línea del archivo crontab puede tener dos formas básicas. Puede ser una declaración de una variable de entorno, o puede ser un comando cron, el cual debe seguir una sintaxis especial.
Una definición de variable de entorno es simple. Su sintaxis es:
Si estás familiarizado con las variables de entorno, notarás lo simple que es. De otra forma, es posible que no necesites preocuparte de ellas aun. Concentrémonos en los comandos cron, que son muy útiles.
La sintaxis de un comando cron es
En donde las variables A-E son valores que determinan el momento en el que cada comando debe ser ejecutado. Estos valores ofrecen una manera simple y muy flexible de definir los tiempos de ejecución de tus comandos. Puedes definir que un comando determinado sea ejecutado cada 24 horas, por ejemplo, o cada 5 minutos, o cada semana, o cada Lunes y Miércoles... en fin, creo que puedes ver la idea.
En orden, su significado es:
A: valor de minutos
B: valor de horas
C: valor de día del mes
D: valor de mes
E: valor de día de la semana
En estos valores, es posible utilizar "comodines" con el caracter asterisco (`*') que quiere decir "cualquier valor". O también puedes definir rangos, como 1-5, 10-20, etc. Aquí puedes ver que en realidad hay mucha flexibilidad. Para ver cómo definir comandos cron un poco avanzados puedes consultar el manual.
Finalmente, la variable COMANDO es sencillamente el comando que deseas ejecutar. Puedes definir argumentos para el comando si lo deseas, también es muy flexible en ese sentido.
Veamos unos ejemplos:
Si quieres ejecutar el comando ~/mantenimiento.sh todos los días a medianoche, una forma de definirlo es:
* 0 * * * ~/mantenimiento.sh
Si quieres ejecutar el comando /usr/sbin/rotatelogs cada 5 minutos, una forma de hacerlo es:
*/5 * * * * /usr/sbin/rotatelogs
Aquí puedes ver que es posible definir intervalos divisibles mediante el caracter de barra (`/'). Aquí es usado en el campo de los minutos.
Para más información, te repito que lo primero que podrías revisar es el manual de crontab. También es muy posible que buscando en la web encuentres un sinfín de ejemplos que pueden guiarte para escribir tus propios comandos cron.
Respecto al uso de este tipo de comandos en máquinas que proveen hospedaje gratuito, es cierto que usualmente es difícil contar con tales recursos... muchos administradores de este tipo de servicios suelen ser cuidadosos en cuanto a otorgar acceso mediante terminal, o privilegios varios como el uso de un crontab. Algunos ofrecen funcionalidades semejantes mediante "páneles de control" con interfaces web, pero en ese sentido ya no es mucho lo que puedo decirte. Al menos como referencia de los comandos cron y crontab, espero que este mensaje te haya sido de ayuda. Un saludo.