Persistiendo tareas programadas (cron) en ESXi Free edition

Nota: Todas las configuraciones indicadas en este post fueron realizadas sobre un hypervisor VMWare ESXi 6.0 free. Es probable que los pasos sean diferentes para otras versiones de hypervisor (de hecho en versiones anteriores lo son).

Continuando con la serie de posts sobre las experiencias con ESXi Free edition, hoy cuento los pasos que tuvimos que seguir para poder persistir ciertas configuraciones.

Para aquellos que no estén familiarizados, desde ESXi 4.0 en adelante los cambios realizados a través de clientes API (ej: cliente vSphere, vCli, PowerCLI) o vCenter se preservan entre reinicios del host ESXi. Este comportamiento no se mantiene si se realiza la edición directa de ciertos archivos de configuración por línea de comandos. Sin embargo hay ciertas configuraciones que solo se pueden lograr por esta vía.

En el escenario presentado, sin vCenter, era necesario realizar ciertas acciones en días y horarios programados (el backup y apagado programado de los equipos al final de la semana). Normalmente esto se solucionaría simplemente insertando las tareas en el crontab. El problema es que el mismo forma parte del almacenamiento no persistente, que se pierde entre reinicios del sistema.

Pre requisitos

En nuestro escenario, para los pasos detallados debajo ya contábamos:

  1. Con SSH habilitado
  2. La herramienta de backup ghettoVCB instalada y configurada
  3. Se había creado un script para el apagado del host (ubicado en la carpeta /vmfs/volumes/datastore1/scripts/)
  4. El host y las máquinas virtuales se encontraban configuradas para apagarse correctamente, como se comentó en el siguiente post

Como configurar las tareas para que se ejecuten a partir del próximo reinicio

Luego de realizar algunas pruebas llegamos a una nota de la KB de VMWare que nos permitió conseguir el resultado deseado. [1]

Esta nota del sitio de VMWare indica de qué forma conseguir persistir ciertos comandos entre reinicios, dicha configuración varia por versiones y es común en tres grupos:

  1. ESX 3.x y 4.x
  2. ESXi 4.x y 5.0
  3. ESXi 5.1, 5.5 y 6.0

Para la versión particular de nuestro escenario, es necesario editar el archivo /etc/rc.local.d/local.sh con el editor vi.

Donde finaliza el contenido del archivo (y previo al comando “exit 0”) se deben agregar las siguientes líneas:

—— líneas a agregar inicio——-

/bin/kill $(cat /var/run/crond.pid)

/bin/echo “59 23 * * 5 /vmfs/volumes/datastore1/scripts/shut.sh” >> /var/spool/cron/crontabs/root

/bin/echo “0 20 * * 1-5 /opt/ghettovcb/bin/ghettoVCB.sh -g /vmfs/volumes/datastore1/scripts/backup/ghettoVCB.conf -a > /vmfs/volumes/datastore1/backups/logs/ghettoVCB-backup-\$(date +\\%s).log” >> /var/spool/cron/crontabs/root

crond

—— líneas a agregar fin ——-


La primera  línea identifica el nro de proceso del daemon crond y mata el proceso.

La segunda línea inserta en el crontab de root una tarea que se ejecuta todos los viernes a las 23:59. En este caso el script shut.sh apaga el host.

La tercera línea inserta en el crontab de root una tarea que se ejecuta todos los días a las 20:00 hs, para la realización del backup y redirige el output a un archivo de log (para el backup utilizamos la herramienta ghettoVCB que puede descargarse desde [3] y cuya documentación puede verse en [4])

La linea final vuelve a iniciar el daemon crond, para que se tomen las configuraciones insertadas.

Como configurar las tareas para que se ejecuten a partir de este momento y antes del próximo reinicio

Para que la configuración del crontab de root se tome antes del próximo reinicio, debemos editar el archivo /var/spool/cron/crontabs/root y agregar las siguientes líneas al mismo:

/bin/echo “59 23 * * 5 /vmfs/volumes/datastore1/scripts/shut.sh” >> /var/spool/cron/crontabs/root

/bin/echo “0 20 * * 1-5 /opt/ghettovcb/bin/ghettoVCB.sh -g /vmfs/volumes/datastore1/scripts/backup/ghettoVCB.conf -a > /vmfs/volumes/datastore1/backups/logs/ghettoVCB-backup-\$(date +\\%s).log” >> /var/spool/cron/crontabs/root

Una vez realizada esta acción, se debe reiniciar el daemon crond, para esto se deben ejecutar los siguientes comandos uno luego del otro:

/bin/kill $(cat /var/run/crond.pid)

crond

Comentarios finales

La sintaxis para planificar tareas por cron tiene ciertas particularidades, para facilitar la misma, se puede utilizar la herramienta del link [4] para generar de forma automática la línea de configuración.

Si bien la versión free del hypervisor ESXi tiene varias limitantes de administración, buscando y probando se pueden lograr cosas muy interesantes con poco esfuerzo.

Referencias:

[1] https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2043564

[2] https://github.com/lamw/ghettoVCB

[3] http://communities.vmware.com/docs/DOC-8760

[2] http://www.generateit.net/cron-job/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *