Este artículo explica cómo instalar un script de inicio init.d (SystemV) para iniciar automáticamente el servicio de Home Assistant en Debian y derivados.
Crear el archivo /etc/init.d/hass
:
# nano /etc/init.d/hass
Pegar el siguiente script de inicio Bash:
#!/bin/sh ### BEGIN INIT INFO # Provides: hass # Required-Start: $local_fs $network $named $time $syslog # Required-Stop: $local_fs $network $named $time $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Home\ Assistant ### END INIT INFO # /etc/init.d Service Script for Home Assistant # Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh PRE_EXEC="" # Typically /usr/bin/hass HASS_BIN="hass" RUN_AS="homeassistant" PID_DIR="/var/run/hass" PID_FILE="$PID_DIR/hass.pid" CONFIG_DIR="/var/opt/homeassistant" LOG_DIR="/var/log/homeassistant" LOG_FILE="$LOG_DIR/home-assistant.log" FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon" start() { create_piddir if [ -f $PID_FILE ] && kill -0 $(cat $PID_FILE) 2> /dev/null; then echo 'Service already running' >&2 return 1 fi echo -n 'Starting service… ' >&2 local CMD="$PRE_EXEC $HASS_BIN $FLAGS" su -s /bin/bash -c "$CMD" $RUN_AS if [ $? -ne 0 ]; then echo "Failed" >&2 else echo 'Done' >&2 fi } stop() { if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2> /dev/null; then echo 'Service not running' >&2 return 1 fi echo -n 'Stopping service… ' >&2 kill $(cat "$PID_FILE") while ps -p $(cat "$PID_FILE") > /dev/null 2>&1; do sleep 1;done; rm -f $PID_FILE echo 'Done' >&2 } install() { echo "Installing Home Assistant Daemon (hass-daemon)" update-rc.d hass-daemon defaults create_piddir mkdir -p $CONFIG_DIR chown $RUN_AS $CONFIG_DIR mkdir -p $LOG_DIR chown $RUN_AS $LOG_DIR } uninstall() { echo "Are you really sure you want to uninstall this service? The INIT script will" echo -n "also be deleted! That cannot be undone. [yes|No] " local SURE read SURE if [ "$SURE" = "yes" ]; then stop remove_piddir echo "Notice: The config directory has not been removed" echo $CONFIG_DIR echo "Notice: The log directory has not been removed" echo $LOG_DIR update-rc.d -f hass-daemon remove rm -fv "$0" echo "Home Assistant Daemon has been removed. Home Assistant is still installed." fi } create_piddir() { if [ ! -d "$PID_DIR" ]; then mkdir -p $PID_DIR chown $RUN_AS "$PID_DIR" fi } remove_piddir() { if [ -d "$PID_DIR" ]; then if [ -e "$PID_FILE" ]; then rm -fv "$PID_FILE" fi rmdir -v "$PID_DIR" fi } case "$1" in start) start ;; stop) stop ;; install) install ;; uninstall) uninstall ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|install|uninstall}" esac
Ajustar las variables HASS_BIN
(binario del servidor hass, utilizar una ruta absoluta en caso de que sea necesario); RUN_AS
(usuario con el que corre el demonio); CONFIG_DIR
(ruta al directorio de configuración de hass) y LOG_DIR
(ruta al directorio donde almacenar los logs del servicio).
Adicionalmente se dispone de una variable PRE_EXEC
, la cual permite ejecutar una acción antes de lanzar el servicio. En mi caso, hass se encuentra instalado dentro de un entorno virtual (virtualenv) de Python, con lo cual necesito activarlo antes de lanzar el servicio. A tal fin, utilizo la siguiente configuración en la variable PRE_EXEC
:
PRE_EXEC="source /usr/local/homeassistant/bin/activate;"
Luego instalar el script para que el servicio inicie automáticamente:
# update-rc.d hass defaults
Finalmente, iniciar el servicio:
# service hass start
Referencias