diff --git a/amd64/Dockerfile b/amd64/Dockerfile index 8ded5d9..8925653 100644 --- a/amd64/Dockerfile +++ b/amd64/Dockerfile @@ -50,10 +50,12 @@ COPY scripts/iobroker_startup.sh iobroker_startup.sh COPY scripts/setup_avahi.sh setup_avahi.sh COPY scripts/setup_packages.sh setup_packages.sh COPY scripts/setup_zwave.sh setup_zwave.sh +COPY scripts/healthcheck.sh healthcheck.sh RUN chmod +x iobroker_startup.sh \ && chmod +x setup_avahi.sh \ && chmod +x setup_packages.sh \ - && chmod +x setup_zwave.sh + && chmod +x setup_zwave.sh \ + && chmod +x healthcheck.sh WORKDIR /opt/userscripts/ COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh @@ -62,7 +64,9 @@ COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh WORKDIR / RUN apt-get update \ && curl -sL https://iobroker.net/install.sh | bash - \ - && echo $(hostname) > /opt/iobroker/.install_host \ + && mkdir -p /opt/iobroker/.docker_config/ \ + && echo $(hostname) > /opt/iobroker/.docker_config/.install_host \ + && echo "starting" > /opt/iobroker/.docker_config/.healthcheck \ && echo $(hostname) > /opt/.firstrun \ && rm -rf /var/lib/apt/lists/* @@ -89,5 +93,9 @@ ENV DEBIAN_FRONTEND="teletype" \ SETUID=1000 \ TZ="Europe/Berlin" +# healthcheck +HEALTHCHECK --interval=15s --timeout=5s --retries=5 \ + CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"] + # Run startup-script ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"] diff --git a/amd64/scripts/healthcheck.sh b/amd64/scripts/healthcheck.sh new file mode 100644 index 0000000..a611b48 --- /dev/null +++ b/amd64/scripts/healthcheck.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Script checks health of running container + +if [ "$(cat /opt/iobroker/.docker_config/.healthcheck)" == "starting" ] || [ "$(cat /opt/iobroker/.docker_config/.healthcheck)" == "maintenance" ] +then + exit 0 +else + if [ "ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}'" != "" ] + then + exit 0 + fi +fi + +exit 1 diff --git a/amd64/scripts/iobroker_startup.sh b/amd64/scripts/iobroker_startup.sh index 869955d..fff9550 100644 --- a/amd64/scripts/iobroker_startup.sh +++ b/amd64/scripts/iobroker_startup.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Setting healthcheck status to "starting" +echo "starting" > /opt/iobroker/.docker_config/.healthcheck + # Reading ENV adminport=$IOB_ADMINPORT avahi=$AVAHI @@ -16,6 +19,23 @@ statesdbtype=$IOB_STATESDB_TYPE usbdevices=$USBDEVICES zwave=$ZWAVE +# Writing necessary ENVs to /opt/iobroker/.docker_config/container.config for using it in other scripts + +echo '# Simple config file to store ENVs' > /opt/iobroker/.docker_config/container.config +echo ' ' >> /opt/iobroker/.docker_config/container.config +if [ "$multihost" = "" ] +then + echo "multihost=master" >> /opt/iobroker/.docker_config/container.config +else + echo "multihost=$multihost" >> /opt/iobroker/.docker_config/container.config +fi +if [ "$adminport" = "" ] +then + echo "adminport=8081" >> /opt/iobroker/.docker_config/container.config +else + echo "adminport=$adminport" >> /opt/iobroker/.docker_config/container.config +fi + # Getting date and time for logging dati=`date '+%Y-%m-%d %H:%M:%S'` @@ -173,12 +193,12 @@ echo "Done." echo ' ' # Checking for first run of a new installation and renaming ioBroker -if [ -f /opt/iobroker/.install_host ] +if [ -f /opt/iobroker/.docker_config/.install_host ] then echo "Looks like this is a new and empty installation of ioBroker." echo "Hostname needs to be updated to " $(hostname)"..." - bash iobroker host $(cat /opt/iobroker/.install_host) - rm -f /opt/iobroker/.install_host + bash iobroker host $(cat /opt/iobroker/.docker_config/.install_host) + rm -f /opt/iobroker/.docker_config/.install_host echo "Done." echo ' ' elif [ $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ] @@ -466,6 +486,9 @@ echo ' ' echo "Starting ioBroker..." echo ' ' +# Setting healthcheck status to "running" +echo "running" > /opt/iobroker/.docker_config/.healthcheck + # Function for graceful shutdown by SIGTERM signal shut_down() { echo ' '