diff --git a/README.md b/README.md index a92290e..011ba64 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,6 @@ # Auto-reload - Docker mod for Nginx based images -This mod allows Nginx to be reloaded automatically whenever there are valid changes to the following files and folders: -- /config/nginx/authelia-location.conf -- /config/nginx/authelia-server.conf -- /config/nginx/geoip2.conf -- /config/nginx/ldap.conf -- /config/nginx/nginx.conf -- /config/nginx/proxy-confs -- /config/nginx/proxy.conf -- /config/nginx/site-confs -- /config/nginx/ssl.conf +This mod allows Nginx to be reloaded automatically whenever there are new files, or valid changes to the files in `/config/nginx`. In the container's docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:swag-auto-reload` diff --git a/root/etc/s6-overlay/s6-rc.d/svc-mod-swag-auto-reload/run b/root/etc/s6-overlay/s6-rc.d/svc-mod-swag-auto-reload/run index af3e5cd..1e92149 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-mod-swag-auto-reload/run +++ b/root/etc/s6-overlay/s6-rc.d/svc-mod-swag-auto-reload/run @@ -1,45 +1,32 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash -DEFAULT_WATCH=( \ - /config/nginx/authelia-location.conf \ - /config/nginx/authelia-server.conf \ - /config/nginx/geoip2.conf \ - /config/nginx/ldap.conf \ - /config/nginx/nginx.conf \ - /config/nginx/proxy-confs \ - /config/nginx/proxy.conf \ - /config/nginx/site-confs \ - /config/nginx/ssl.conf \ -) - -echo "MOD Auto-reload: Watching the following files/folders for changes" -for i in ${DEFAULT_WATCH[@]}; do +echo "MOD Auto-reload: Watching the following files/folders for changes (excluding .sample and .md files):" +echo "/config/nginx" +ACTIVE_WATCH=("/config/nginx") +for i in $(echo "${WATCHLIST}" | tr "|" " "); do if [ -f "${i}" ] || [ -d "${i}" ]; then echo "${i}" - ACTIVE_WATCH="${ACTIVE_WATCH} ${i}" - fi -done -for i in $(echo "$WATCHLIST" | tr "|" " "); do - if [ -f "${i}" ] || [ -d "${i}" ]; then - echo "${i}" - ACTIVE_WATCH="${ACTIVE_WATCH} ${i}" + ACTIVE_WATCH+=("${i}") fi done function wait_for_changes { inotifywait -rq \ --event modify,move,create,delete \ - ${ACTIVE_WATCH} + --excludei '\.(sample|md)' \ + "${ACTIVE_WATCH[@]}" } while wait_for_changes; do - if ! cat /etc/nginx/nginx.conf | grep "/config/nginx/nginx.conf"; then - export NGINX_CONF="-c /config/nginx/nginx.conf" + NGINX_CONF=() + if ! grep -q "/config/nginx/nginx.conf" /etc/nginx/nginx.conf; then + NGINX_CONF=("-c" "/config/nginx/nginx.conf") fi - if /usr/sbin/nginx ${NGINX_CONF} -t; then + if /usr/sbin/nginx "${NGINX_CONF[@]}" -t; then echo "Changes to nginx config detected and the changes are valid, reloading nginx" - /usr/sbin/nginx ${NGINX_CONF} -s reload + /usr/sbin/nginx "${NGINX_CONF[@]}" -s reload else echo "Changes to nginx config detected but the changes are not valid, skipping nginx reload. Please fix your config." - fi + fi done diff --git a/root/etc/services.d/inotify/run b/root/etc/services.d/inotify/run index 0996168..1e92149 100755 --- a/root/etc/services.d/inotify/run +++ b/root/etc/services.d/inotify/run @@ -1,42 +1,32 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash -DEFAULT_WATCH=( \ - /config/nginx/authelia-location.conf \ - /config/nginx/authelia-server.conf \ - /config/nginx/geoip2.conf \ - /config/nginx/ldap.conf \ - /config/nginx/nginx.conf \ - /config/nginx/proxy-confs \ - /config/nginx/proxy.conf \ - /config/nginx/site-confs \ - /config/nginx/ssl.conf \ -) - -echo "MOD Auto-reload: Watching the following files/folders for changes" -for i in ${DEFAULT_WATCH[@]}; do +echo "MOD Auto-reload: Watching the following files/folders for changes (excluding .sample and .md files):" +echo "/config/nginx" +ACTIVE_WATCH=("/config/nginx") +for i in $(echo "${WATCHLIST}" | tr "|" " "); do if [ -f "${i}" ] || [ -d "${i}" ]; then echo "${i}" - ACTIVE_WATCH="${ACTIVE_WATCH} ${i}" - fi -done -for i in $(echo "$WATCHLIST" | tr "|" " "); do - if [ -f "${i}" ] || [ -d "${i}" ]; then - echo "${i}" - ACTIVE_WATCH="${ACTIVE_WATCH} ${i}" + ACTIVE_WATCH+=("${i}") fi done function wait_for_changes { inotifywait -rq \ --event modify,move,create,delete \ - ${ACTIVE_WATCH} + --excludei '\.(sample|md)' \ + "${ACTIVE_WATCH[@]}" } while wait_for_changes; do - if /usr/sbin/nginx -c /config/nginx/nginx.conf -t; then + NGINX_CONF=() + if ! grep -q "/config/nginx/nginx.conf" /etc/nginx/nginx.conf; then + NGINX_CONF=("-c" "/config/nginx/nginx.conf") + fi + if /usr/sbin/nginx "${NGINX_CONF[@]}" -t; then echo "Changes to nginx config detected and the changes are valid, reloading nginx" - /usr/sbin/nginx -c /config/nginx/nginx.conf -s reload + /usr/sbin/nginx "${NGINX_CONF[@]}" -s reload else echo "Changes to nginx config detected but the changes are not valid, skipping nginx reload. Please fix your config." - fi + fi done