Tolerancia a errores de OpenVPN en Ubuntu / Debian

Garantizar que una aplicación pueda recuperarse en caso de que se produzca un fallo o error es una de las características mas importantes para garantizar la tolerancia a errores. A tal efecto es muy importante que si se despliega un servicio en producción, podamos garantizar su disponibilidad. En caso de caída del servicio, se deberá de implementar todas las medidas pertinentes para que dicho servicio se recupere. 

La tolerancia a errores en un servicio como OpenVPN se puede lograr a través de múltiples opciones. A continuación se va a describir una forma de garantizar la tolerancia a errores de un proceso en Ubuntu o Debian.

En primer lugar se indicará en la configuración del servidor que se almacene el PID del servicio en la siguiente ruta:


/var/run/


Para ello, se empleará la directiva writepid de la siguiente forma:


writepid /var/run/openvpn.server.pid


De esta forma se garantiza que se almacene el PID del servicio en la ruta correspondiente. Dicha ruta será empleada para conocer si el servicio esta arrancado o no. Esta comprobación se realizará una vez por minuto empleando el cron del servidor.

Para que el CRON se pueda encargar de esta comprobación se modificará de la siguiente forma:


sudo crontab -e


Se añadirá la siguiente línea:


* * * * * /sbin/start-stop-daemon -S -p /var/run/openvpn.server.pid -x /usr/sbin/openvpn -- --config /etc/openvpn/server.conf --daemon


Es decir se añadirá una línea por cada instancia OpenVPN a verificar. Tal y como se puede apreciar a partir del código se empleará el demonio start-stop-daemon con la opción –S. De esta forma si el proceso se encuentra activo no se reiniciará. Mediante la opción –p se incluirá la ruta al fichero donde se almacena el PID del proceso. A través de la opción –x se indicará la ruta absoluta al servicio a arrancar. Dicha ruta se ha obtenido realizado ejecutando el siguiente comando:

which openvpn

Posteriormente, se empleará como separador -- para indicarle las opciones pertinentes a OpenVPN. Con la opción --config se indicará el archivo de configuración a emplear. Finalmente se empleará la opción -- daemon para que el servicio arranque como demonio. Destacar que será necesario reiniciar cron de la siguiente forma:

sudo stop cron
sudo start cron

En conclusión, gracias al Cron del sistema así como al comando start-stop-daemon, en caso de que el servicio OpenVPN se detenga, garantizamos que el mismo se vuelva a reiniciar. En caso de que se quiera garantizar la tolerancia a errores de otro servicio, simplemente se deberá de implementar las medidas pertinentes para almacenar el PID del proceso en un fichero en concreto. De esta forma se podrá emplear dicho fichero a través del comando start-stop-daemon tal y como se ha realizado en esta entrada.