Anacron (Tareas planificadas)

Gandi Simple Hosting no incluye el planificador estándar de Unix/Linux, cron. Sin embargo, tiene una poderosa herramienta que puede utilizar para este propósito: anacron.

Concepto

La idea es sencilla: Decida qué comando o programa (tarea) desea ejecutar periódicamente y en qué intervalo. Ponga una entrada en el archivo de configuración para definir la tarea y el intervalo. la tarea se ejecutará en el intervalo definido.

Cada tarea puede tener su propio intervalo.

Nota

Hemos modificado la versión estándar de anacron, para reducir el intervalo mínimo y dar más flexibilidad a nuestros clientes. El intervalo más pequeño que puede establecer es ahora de una hora.

Advertencia

Las tareas de Cron (y anacron) utilizan procesos. Esto significa que en una instancia Simple Hosting de Tamaño S, que sólo tiene 2 procesos que pueden ejecutarse simultáneamente, la tarea cron utilizará uno de estos procesos. Puede bloquear su instancia si ejecuta demasiadas tareas cron al mismo tiempo, o al mismo tiempo que otros procesos concurrentes. Si necesita muchas tareas cron, considere una instancia de tamaño M o mayor.

Configuración

Para configurar anacron, edita el archivo anacrontab. Sólo hay un archivo anacrontab por cada instancia de Simple Hosting, accesible a través de SFTP y la Consola de Emergencia :

SFTP: /lamp0/etc/cron/anacrontab.

Consola de emergencia: /srv/data/etc/cron/anacrontab.

Descargue este archivo con SFTP, como lo haría con cualquier otro archivo al que tenga acceso en la instancia. Entonces, podrá editarlo localmente en su sistema y, cuando esté listo, volver a transferir su versión a su lugar. Se leerá e ejemplificará automáticamente.

Nota

Utilice cualquier editor de texto que conserve las terminaciones de línea nativas. ¡No utilice un procesador de textos! Cualquier línea que comience con un carácter # es un comentario. ¡Los comentarios son una buena idea!

Determinar la frecuencia

Se especifica la frecuencia con dos parámetros, un índice de frecuencia y un «multiplier.frequency» con dos parámetros, un índice de frecuencia y un multiplicador.

Los índices de frecuencia son (de menor a mayor):

  • Hourly (hora)
  • Daily (día)
  • Monthly (mes)
  • Yearly (año)

Para determinar la frecuencia de su acción, simplemente multiplique el índice por el valor deseado.

Por ejemplo, si desea realizar una acción cada 2 horas, introduzca: 2@hourly Si desea que una operación se efectúe cada día como copia de seguridad de su base de datos, por ejemplo, puede especificarlo de varias maneras: 24@hourly significa cada 24 horas 1@daily significa una vez al día (también puede escribirse como» @daily sin el multiplicador, ya que se supone que es 1).

Sintaxis

Ahora que sabe cómo determinar la frecuencia, sólo necesita saber la sintaxis. Hay cuatro componentes:

  • Frecuencia
  • Tiempo de espera
  • Nombre único
  • Acción

El tiempo de espera no se usa en nuestra versión de anacron, y será ignorado. Sin embargo, por razones de compatibilidad, necesitamos poner un valor. Ponga 0. El nombre único solo se utiliza para identificar la tarea en anacron. Este nombre puede ser cualquier cosa, y tiene que ser único. La acción es el comando a ejecutar. Puede introducir una línea de comandos como si la estuviera escribiendo. Incluso puede llamar a los scripts o programas que escriba.

En nuestro ejemplo, configurarements una purga de archivos temporales con más de 7 días de antigüedad, que se ejecutará diariamente:

@daily 0 purgetmp find /src/data/tmp -type f -mtime +7 -delete >> /dev/null

@daily declara que esta acción debería tener lugar una vez al día (podríamos decir 1@daily, también). 0 corresponde al valor de tiempo de espera que el sistema ignora. purgetmp es el nombre único que asignamos a la acción para identificarla en la lista. El comando find /src/data/tmp -type f -mtime 7 -delete » /dev/null se utiliza para eliminar archivos temporales con más de 7 días de antigüedad.

Ejemplos de uso

Exportación de una base de datos MySQL

En el caso de que desee utilizar instantáneas (snapshots) para hacer copias de seguridad de su instancia, la base de datos MySQL se almacena de una manera que no permite una simple recuperación de sus datos en caso de problema.

Para realizar una copia de seguridad de sus bases de datos, es necesario realizar una exportación mediante el comando mysqldump. Para tener copias de seguridad actualizadas, deberá crear una tarea anacron para realizar copias de seguridad regulares. Abajo, tiene un ejemplo que puede añadir a su instancia (con algunas adaptaciones necesarias para que funcione con su instancia):

@daily 0 mysql_backup mkdir -p /srv/data/tmp/mysql_backup ; mysqldump -u root {-pPASSWORD} --all-databases | /bin/gzip -9 > /srv/data/tmp/mysql_backup/`date '+%F'`.databases.sql.gz ; rm -f /srv/data/tmp/mysql_backup/`date '+%F' --date '1 week ago'`.databases.sql.gz

Esta línea hará que su base de datos sea exportada todos los días, y mantendrá la última exportación durante una semana.

Truco

Considere la posibilidad de adaptar el comando a su propia configuración, si el usuario “root” no tiene contraseña, entonces debe eliminar {-pASSWORD}, o eliminar los corchetes {} e indicar la contraseña de su usuario “root” después de “-p”.

Exportación de una base de datos PostgreSQL

El uso es similar al de MySQL, el comando pg_dumpall exporta todas las bases de datos postgresql en la instancia.

@daily 0 psql_backup mkdir -p /srv/data/tmp/psql_backup ;  pg_dumpall --username=hosting-db -h localhost > /srv/data/tmp/psql_backup/`date '+%F'`.databases ; rm -f /srv/data/tmp/psql_backup/`date '+%F' --date '1 week ago'`.databases

Vaciar un archivo de registro

Puede utilizar anacron para eliminar el contenido de los archivos de registro de su instancia, en el ejemplo de abajo el archivo access.log del servidor web Apache:

@daily 0 purge_apache_logs echo "***** Log cleaned at `date'+%F-%H%M'` *****" > /srv/data/var/log/apache/access.log

Ejecutar un script PHP

También puede ejecutar scripts escritos en PHP. Para hacer esto, necesitará usar el comando php, junto con la opción -f y la ruta al archivo.

Sus archivos seguirán estando en la misma ubicación (/srv/data/web/vhosts), seguido por el directorio del VHOST y la ruta hacia el archivo dentro del código de su aplicación.

En el siguiente ejemplo, ejecutamos un archivo llamado cron.php todos los días, que está en la raíz de nuestro VHOST www.example.com.

@daily 0 my_php_script php -f /srv/data/web/vhosts/www.example.com/cron.php

PREGUNTAS FRECUENTES ===

¿Por qué anacron en lugar de cron?

Anacron tiene el beneficio adicional de que si su instancia está desconectada (disco lleno), cuando se inicie de nuevo, se ejecutarán todas las tareas que se programaron para ejecutarse mientras la instancia estaba desconectada. Con cron esas tareas serían omitidas, y usted podría perderse copias de seguridad de tareas potencialmente importantes.

¿Cuándo se ejecutará mi tarea de anacron?

Un servicio verifica cada hora para determinar si hay alguna tarea vencida que deba ejecutarse. El minuto y segundo exacto en que esto sucede se basa en el momento en que se inició la instancia, más un retraso aleatorio para repartir la carga desde varias instancias en un solo nodo.