At, cron y anacron |
[ Sistemas operativos / Linux ] |
Me gustaría que contarais cómo se puede programar Linux para que ejecute una tarea a una hora determinada. ¿Tiene algo que ver con cron? |
Roberto Fernández |
La orden que necesitas es at. Si está en ejecución el demonio atd te permite planificar para una hora determinada las órdenes que indiques. Si por ejemplo quieres bajarte a las dos de la mañana de hoy la página raíz de AUGCyL utilizando Wget, empieza por ejecutar at 2:00. A continuación, teclea wget http://www.augcyl.org/ y en la siguiente línea pulsa "control+d" para indicar que no hay más órdenes a ejecutar. Si ejecutas atq verás los trabajos que has planificado y con atrm podrás cancelarlos. Puede ocurrir que el sistema que utilices no tenga activado atd o que no tengas permiso para usarlo, por eso, salvo que seas el superusuario, tienes que estar incluido en /etc/at.allow o bien que no exista este fichero pero sí /etc/at.deny y no estés incluido en él. Si no podemos utilizar at, siempre tenemos la alternativa de auxiliarnos de sleep. Si fueran las ocho de la tarde y por lo tanto quedaran 6 horas (21.600 segundos) para las dos de la mañana, para nuestro ejemplo anterior ejecutaríamos: (sleep 21600 ; wget http://www.augcyl.org/) . En la mayoría de las configuraciones actuales esta ejecución continúa aunque cerremos la sesión, pero si se quiere estar totalmente seguro, se pueden meter las dos órdenes en un fichero y ejecutarlo con nohup. Existe una variante a at que es batch. Funciona igual salvo que espera, a partir de la hora fijada, a que la carga del sistema sea inferior al valor fijado con el parámetro -l al arrancar atd. Por defecto, este valor es 0.8 (se puede ver la carga actual ejecutando uptime; con frecuencia en un sistema de escritorio es inferior a 0.1). Cron se usa para ejecutar tareas con carácter periódico, mientras que at es para tareas puntuales. Con cron el momento de ejecución se hace indicando un minuto concreto, dentro de una hora, día de la semana y mes. Si no se rellenan algunos de los campos, se entiende que para todos los valores de esos campos (por ejemplo, si no se pone hora ni mes, se entiende que es para todas las horas a ese minuto, todos los meses el día especificado). Para obtener más información se sugiere la lectura de la página del manual crontab, invocando man 5 crontab. Si no se quiere especificar con tanta precisión, sino simplemente tareas a ejecutar con periodicidad horaria, diaria, semanal o mensual, es más aconsejable crear un fichero con las órdenes a ejecutar bajo los directorios /etc/cron.hourly, /etc/cron.daily, etc. Al cumplirse el periodo estipulado, se ejecutarán todos los ficheros presentes en el correspondiente directorio. Mirando el fichero /etc/crontab se puede ver exactamente a qué minuto y en su caso hora y día se ejecutan estas operaciones. Una ventaja añadida de estos directorios la encontramos cuando nuestro sistema no es un servidor que está todo el rato encendido sino un ordenador de escritorio. En ese caso es muy posible que el día y hora fijado esté apagado y por tanto no se ejecute la operación. La solución la da el programa anacron, que se ejecuta al arrancar el sistema. Comprueba una marca de tiempo para saber si los ficheros se han ejecutado desde el periodo especificado y si no es así los ejecuta tras transcurrir el retardo configurado en el fichero /etc/anacrontab (el retardo es para que no se ejecuten todos a la vez nada más arrancar el sistema, en cualquier caso, lo normal es que no tengamos que tocar el fichero). El resto del tiempo será cron quien actúe, que también actualizará las marcas de tiempo que lee anacron en cada arranque al haber un fichero para ello en los directorios /etc/cron.*. |
Anterior Siguiente |
© 2002 VNU Business Publications España. Queda terminantemente prohibida su reproducción total o parcial por cualquier medio sin el permiso explicito y por escrito del propietario del copyright. |