Utilizando Monit se puede controlar el estado de procesos de una máquina, y actuar en consecuencia automaticamente en función del estado de los mismos. Es necesario distinguir los dos proyectos del mismo equipo de desarrollo: Monit (opensource) y M/Monit, comercial.
En el caso de que se estén ejecutando máquinas virtuales con VirtualBox, éstas se pueden levantar en caso de caída, cumpliendo siempre los siguientes requisitos:
– Instalar VirtualBox como un demonio (servicio), tantas veces como máquinas virtuales se tengan.
– Cada máquina virtual debe tener activado el servicio «RemoteDisplay» (vdrp) con un puerto distinto logicamente.
Configurado esto, sería necesario añadir en /etc/monit/monitrc el siguiente código adaptándolo a la situación particular:
check host VirtualBox-Monowall with address 127.0.0.1
start program = "/etc/init.d/virtualbox-Monowall start"
stop program = "/etc/init.d/virtualbox-Monowall stop"
if failed port 3389 then restart
Donde habría que cambiar el nombre, la ruta del demonio y el puerto.
Hecho esto, reiniciar el servicio y hacer una prueba matando el proceso:
$ sudo /etc/init.d/monit restart
Stopping daemon monitor: monit.
Starting daemon monitor: monit.
$ ps axu | grep VB
carlos 14786 5.9 10.2 191844 91860 ? Sl 22:05 2:12 /usr/lib/virtualbox/VBoxHeadless -comment Monowall -startvm 8ea024df-49f2-4d1f-bd5c-f3ba15aacb37
$ kill -9 14786
Tras esperar el tiempo definido en Monit para chequear el sistema, se puede ver en el log de Monit como arranca la máquina:
$ tail -10f /var/log/monit.log
[CET Jan 8 22:05:33] error : 'VirtualBox-Monowall' failed, cannot open a connection to INET[127.0.0.1:3389] via TCP
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' trying to restart
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' stop: /etc/init.d/virtualbox-Monowall
[CET Jan 8 22:05:36] info : 'VirtualBox-Monowall' start: /etc/init.d/virtualbox-Monowall
$ ps axu | grep VB
carlos@shirley:~/.VirtualBox/Machines/Monowall$ ps aux | grep VB
carlos 16204 27.6 10.2 191516 91800 ? Sl 22:48 0:27 /usr/lib/virtualbox/VBoxHeadless -comment Monowall -startvm 8ea024df-49f2-4d1f-bd5c-f3ba15aacb
37
carlos 16341 0.0 0.1 7468 896 pts/4 S+ 22:50 0:00 grep VB
carlos 30314 0.0 0.2 24356 2060 ? S 14:29 0:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
carlos 30321 0.0 0.6 43752 5528 ? Sl 14:29 0:05 /usr/lib/virtualbox/VBoxSVC --automate