TÍTULO: Demonio de Planificación Fcron VERSIÓN LFS: 3.3 (o superiores, con cambios menores) AUTOR: Robert Park <feztaa@shaw.ca> (originalmente por Lyle Vogtmann <vogtmann@pioneernet.net>) TRADUCTOR: Proyecto LFS-ES SINOPSIS: Cómo configurar el demonio de planificación de tareas fcron en un sistema LFS. RECETA: Historial de modificaciones --------------------------- Revisión 1.5 2002/06/09 04:14:05 feztaa Añadidas algunas notas, cambiado el estilo de los bloques de código y corregidos un par de errores tipográficos. Revisión 1.4 2002/05/02 00:05:36 feztaa Arreglado un problema con el guión cronmail que entregaba el correo incorrectamente, clarificadas algunas ambigüedades y reducidas algunas redundancias en los fcrontabs. Revisión 1.3 2002/04/27 19:28:08 feztaa Arreglados algunos errores tipográficos y otros errores gramaticales (oops ;) Revisión 1.2 2002/04/27 19:17:48 feztaa He asumido el mantenimiento de esta receta de Lyle. Añadido el guión 'cronmail', actualizados los guiones de arranque a LFS 3.3 y reformateado el aspecto de la receta. Introducción ------------ Escribí esto para ayudar a otros a configurar y usar el sustituto del Cron de Vixie, conocido como fcron. Cron es un muy útil y casi omnipresente demonio en sistemas de tipo Unix. Se inicia en el arranque y se ejecuta en el fondo, iniciando tareas programadas especificadas en un fichero "crontab". Hay muchas versiones de cron disponibles, cada una con sus propias adiciones y características. Fcron tiene una mezcla de algunas de las mejores características. Fcron puede funcionar como un cron estándar, ejecutando tareas a una hora determinada en un día determinado. También puede funcionar como anacron, ejecutando tareas después de un cierto periodo de tiempo a una hora no especificada (si no mantienes encendido tu ordenador todo el tiempo, esto es un regalo llovido del cielo). También puede ejecutar tareas después de un tiempo determinado respecto al tiempo que el sistema lleva encendido. Para más información, consulta la página principal de fcron en http://fcron.free.fr. Notas ----- En un intento de hacer esto más fácil de leer, todos los "bloque de código" que deberías ejecutar en la línea de comandos empiezan y terminan con un "##--CÓDIGO--##". Eres libre de copiar éso en la línea de comandos con el mismo código, no dañará nada. Además, en el texto citado (la salida de un programa, por ejemplo), cada línea se sangrará con cuatro espacios. Requisitos ---------- Si quieres ver la salida de los comandos que ejecuta Fcron, querrás tener un sistema de correo funcional instalado. Si no estás interesado en instalar un sistema de correo en tu sistema, he escrito un guión "cronmail" que puedes utilizar para permitir a fcron enviarte correo sin un Agente de Transporte de Correo (MTA - Mail Transport Agent) completo en tu sistema. Aunque necesitarás instalar el paquete procmail, ya que el guión cronmail utiliza formail (que viene con procmail). Esta receta no cubre cómo configurar un servicio de correo local, pero te mostraré cómo instalar cronmail. Si quieres configurar un servicio de correo local, consulta el TLDP-ES en http://lucas.hispalinux.es (LDP en inglés en http://www.linuxdoc.org). Te recomiendo Postfix, http://www.postfix.org. Instrucciones ------------- 1. Obtén el código fuente de fcron de http://fcron.free.fr y desempaquétalo. Yo utilizo fcron 2.9.0, pero esta receta también debería funcionar para otras versiones. 2. Añade el usuario y el grupo a tu sistema: ##--CÓDIGO--## groupadd -g 13 fcron useradd -u 13 -g fcron -d /dev/null -s /bin/false fcron ##--CÓDIGO--## Esto crea el grupo fcron con el número de identificación de grupo (GID) 13 y el usuario fcron con el número de identificación de usuario 13. También evita que alguien pueda entrar en el sistema utilizando esta cuenta, ya que su directorio principal es /dev/null y su intérprete de comandos es /bin/false. 3. Ejecuta configure: ##--CÓDIGO--## ./configure --prefix=/usr --with-spooldir=/var/lib/fcron ##--CÓDIGO--## Esto ordena a fcron poner sus ficheros fcrontab en /var/lib/fcron. Yo, personalmente, utilizo /var/fcron pero, si quieres cumplir la norma FHS, tienes que utilizar /var/lib/fcron. 4. Podrías querer echar un vistazo al fichero config.h para hacer cualquier cambio al proceso de construcción pero, por propia experiencia, es innecesario. Si editas este fichero, asegúrate de comprobar la localización de los ficheros clave, como fcron.allow, fcron.deny, etc. Además, puedes configurar a qué programa llama Fcron cuando te envía un correo, si quieres. 5. Compila: ##--CÓDIGO--## make && su -c "make install" ##--CÓDIGO--## Esto compilará el código fuente y lo instalará como administrador (root). Cuando te pregunta si quieres instalar el guión de inicio, contesta que no. Vamos a hacer nosotros mismos más adelante uno mejor. 7. Si estás actualizando, asegúrate de ejecutar este comando para cada usuario de tu sistema que tenga un fichero fcrontab durante la instalación: ##--CÓDIGO--## fcrontab -u <usuario> -z ##--CÓDIGO--## Esto, simplemente, actualiza el fichero fcrontab, en el caso de que el formato haya cambiado. 8. Ahora crea los guiones de arranque. Ejecuta esto como administrador (root): ##--CÓDIGO--## cat >/etc/rc.d/init.d/fcron <<"EOF" #!/bin/bash # Begin $rc_base/init.d/fcron source /etc/sysconfig/rc source $rc_functions case "$1" in start) echo "Iniciando fcron..." loadproc /usr/sbin/fcron ;; stop) echo "Deteniendo fcron..." killproc fcron ;; restart) $0 stop sleep 1 $0 start ;; status) statusproc fcron ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac # End $rc_base/init.d/fcron EOF chmod 755 /etc/rc.d/init.d/fcron ##--CÓDIGO--## Además, necesitarás hacer los enlaces simbólicos en los directorios apropiados. Hice los mío como sigue, pero podrías querer hacerlo de manera diferente: ##--CÓDIGO--## cd /etc/rc.d/rc0.d && ln -s ../init.d/fcron K35fcron && cd /etc/rc.d/rc6.d && ln -s ../init.d/fcron K35fcron && cd /etc/rc.d/rc3.d && ln -s ../init.d/fcron S60fcron ##--CÓDIGO--## 9. Ahora necesitas darle algunas tareas para realizar (¡si no, no sería muy útil!). Lee la página del manual (man) de fcrontab: ##--CÓDIGO--## man 5 fcrontab ##--CÓDIGO--## Si necesitas algunos ejemplos para comenzar, esto es lo que tengo en el fcrontab del administrador (root): (esto es la salida de 'fcrontab -l') !mailto(feztaa),mail(yes),forcemail(yes),noticenotrun(yes) %daily * 9-15 updatedb --prunepaths="/mnt /proc /dev" %daily * 9-15 logreport Este fichero fcrontab es bastante sencillo. Primero, fijamos algunas opciones: enviar el correo a feztaa (yo), siempre enviar correo (sin importar qué) y notificar si el comando no se ejecutó. Entonces, ejecutamos updatedb cada día entre las 9 AM y las 3 PM. Finalmente, ejecutamos logreport a la misma hora en la que updatedb se ejecuta (logreport sólo es un rápido guión de bash que escribí para explorar mis ficheros de registro y notificarme las entradas al sistema del administrador [root]). En mi propio fcrontab tengo lo siguiente: !mailto(feztaa),mail(yes),forcemail(yes),noticenotrun(yes) %monthly * * 1-4 oldmail Esto fija las mismas opciones que en el fcrontab del administrador, y entonces ejecuta oldmail tan pronto como puede, en algún momento dentro de los cuatro primeros días de cada mes (oldmail es otro guión simple que escribí para, simplemente, archivar y comprimir mi correo antiguo). Lo que he escrito aquí no es, ni de lejos, sustituto de leer la página del manual; apenas he arañado la superficie en esta receta. Si quieres sacar el máximo partido de fcron, hazte un favor y lee la página del manual. Para instalar tu fcrontab, ejecuta: ##--CÓDIGO--## fcrontab -u <usuario> -e ##--CÓDIGO--## La opción -u puede omitirse si el fcrontab que quieres editar pertenece al mismo usuario que ejecuta el comando. El editor por defecto (definido en /etc/fcron.conf) debería comenzar con un pantalla en blanco. Escribe las entradas de acuerdo a la página del manual de fcrontab(5). Cuando hayas terminado, salva los cambios y sal (:wq en vim). Fcrontab comprueba entonces tu trabajo buscando errores, y se queja si encuentra alguno. Además, rehusará utilizar el fcrontab defectuoso. Si obtienes un error, inténtalo de nuevo y lee la página del manual para ver qué puedes estar haciendo mal. Cuando consigas tenerlo bien, fcrontab pasa el fichero a fcron y lo salva en /var/lib/fcron/<nombre_usuario>. ¡NO EDITES ESTE FICHERO! Utiliza siempre fcron para editar tu fichero fcrontab, es mucho más seguro de esta forma. 10. Ahora, para controlar quién tiene acceso a fcron, edita /etc/fcron.allow y fcron.deny. Creo que sólo el administrador y un selecto grupo de usuarios privilegiados deberían poder utilizar tal demonio, luego yo escribo "all" en fcron.deny y "root" y "feztaa" en fcron.allow. 11. Instalaremos ahora el guión cronmail del que te he hablado en la introducción. Si no quieres este guión, ¡has terminado! Si lo quieres, continúa leyendo... Primero, ejecuta esto como administrador (root): ##--CÓDIGO--## cat >/usr/bin/cronmail <<"EOF" #!/bin/bash # Versión: 1.4 # Autor: Rob Park <feztaa@shaw.ca> # Licencia: GNU General Public License ######################################################################## # ¡Probablemente quieras editar las dos definiciones de variables # # siguientes para ajustarte mejor a tu sistema! ¡Te he avisado! # ######################################################################## # ¿Cuál es el nombre por defecto a usar si no se especifica ninguno, o # si se especifica el administrador (root)? Básicamente, ¿quién recibe # el correo del administrador? default="feztaa" # ¿A dónde debería enviarse el correo? Esto es un buzón de formato mbox # que está en algún lugar dentro del directorio principal del usuario # (lo lamento, sólo se soporta el formato mbox, por ahora). mbox="mail/cron" ################################################################## # ¡No deberías necesitar editar nada por debajo de esta línea ;) # ################################################################## # Ignora todos los argumentos hasta encontrar uno que sea un nombre # válido de usuario until id "$1" >/dev/null 2>&1 do shift done # El nombre del usuario es ahora el primer argumento name="$1" # Si no se encuentra el primer argumento, o es "root", enviar el mensaje # al usuario por defecto. [ "$name" == "" ] && name=$default [ "$name" == "root" ] && name=$default # Redirecciona la entrada estándar al buzón mbox en el directorio # principal del usuario, añadiendo algunas cabeceras para hacerlo # parecerse más a un correo real. formail -a "Message-ID:" -I "From: Cron <fcron@localhost>" -I "To: $name <$name@localhost>" >> /home/$name/$mbox EOF chmod 755 /usr/bin/cronmail ##--CÓDIGO--## Este guión es un sustituto muy simple de sendmail. Busca un nombre de usuario en la lista de argumentos, marca el mensaje con algunas cabeceras de corro usando formail y lo envía a un buzón mbox en el directorio principal del usuario. Puedes editar dónde exactamente quieres recibirlo y quién quieres que reciba el correo del administrador. Como yo recibo todo mi correo en ~/mail, tengo configurado el guión para que envíe el correo a ~/mail/cron. Lo siguiente que necesitamos hacer es ordenar a fcron utilizar nuestro guión cronmail. Ejecuta este comando para hacer el cambio: ##--CÓDIGO--## cd /etc && perl -i -pe 's%^sendmail\s*=.*$%sendmail=/usr/bin/cronmail%' fcron.conf ##--CÓDIGO--## Ahora, reinicia fcron (si estaba ejecutándose), y ¡ya estás preparado para continuar! El Fin ------ ¡Lo has hecho! Ahora tienes una utilidad de planificación de tareas que ejecutará comandos automáticamente por ti. Si tienes alguna pregunta, sugerencia o problema, POR FAVOR escríbeme y te ayudaré tanto como mi habilidad me permita. |