@@ -728,6 +728,9 @@ services:
728728 # cron daemon with access to Docker socket but no networking
729729 cron-docker :
730730 image : alpinelinux/docker-cli:latest
731+ build :
732+ context : ..
733+ dockerfile : docker/util.Dockerfile
731734 command : crond -f -d7
732735 configs :
733736 # restart worker to prevent memory issues
@@ -738,10 +741,18 @@ services:
738741 - source : restart_nassl_worker_cron
739742 target : /etc/periodic/15min/restart_nassl_worker
740743 mode : 0755
744+ - source : restart_slow_worker_cron
745+ target : /etc/periodic/daily/restart_slow_worker
746+ mode : 0755
741747 # remove unused old docker images to reduce disk space usage
742748 - source : docker_image_prune
743749 target : /etc/periodic/weekly/docker-image-prune
744750 mode : 0755
751+ environment :
752+ - AUTO_UPDATE_TO
753+ - WORKER_REPLICAS
754+ - WORKER_SLOW_REPLICAS
755+
745756 restart : unless-stopped
746757 logging :
747758 driver : $LOGGING_DRIVER
@@ -753,6 +764,7 @@ services:
753764 network_mode : " none"
754765 volumes :
755766 - /var/run/docker.sock:/var/run/docker.sock
767+ - /opt/Internet.nl:/opt/Internet.nl
756768
757769 profiles :
758770 - cron
@@ -1128,24 +1140,83 @@ configs:
11281140 restart_worker_cron :
11291141 content : |
11301142 #!/bin/sh
1143+
1144+ # restart slow worker every day to prevent slow memory leaks
1145+ # as the slow worker can run very long tasks (eg: report generation)
1146+ # we first start a new container before stopping the previous one
1147+
11311148 set -e
1132- # stop and start worker one at a time to ensure (batch) tasks are still being picked up
1133- # workers are sent a TERM signal with which a 10 minute grace period before QUIT is sent
1134- for worker in $(docker ps --filter label=com.docker.compose.service=worker --quiet); do
1135- docker stop "$$worker"
1136- docker start "$$worker"
1137- done
11381149
1150+ cd /opt/Internet.nl
1151+
1152+ SERVICE=worker
1153+ REPLICAS=$$WORKER_REPLICAS
1154+ COMPOSE_CMD="docker compose --env-file=docker/defaults.env --env-file=docker/host.env --env-file=docker/local.env"
1155+
1156+ OLD_CONTAINERS=$$($$COMPOSE_CMD ps --format "{{ .Name }}"|grep "$$SERVICE")
1157+
1158+ # bring up new containers, wait until healthy
1159+ $$COMPOSE_CMD up --no-deps --no-recreate --wait --scale="$$SERVICE=$$(($$REPLICAS*2))" "$$SERVICE"
1160+
1161+ # graceful shutdown and remove old containers
1162+ docker rm --force "$$OLD_CONTAINERS"
1163+
1164+ # restore replica number to original
1165+ $$COMPOSE_CMD scale $$SERVICE=$$REPLICAS
11391166 restart_nassl_worker_cron :
11401167 content : |
11411168 #!/bin/sh
1169+
1170+ # restart slow worker every day to prevent slow memory leaks
1171+ # as the slow worker can run very long tasks (eg: report generation)
1172+ # we first start a new container before stopping the previous one
1173+
11421174 set -e
1143- # stop and start worker one at a time to ensure (batch) tasks are still being picked up
1144- # workers are sent a TERM signal with which a 10 minute grace period before QUIT is sent
1145- for worker in $(docker ps --filter label=com.docker.compose.service=worker-nassl --quiet); do
1146- docker stop "$$worker"
1147- docker start "$$worker"
1148- done
1175+
1176+ cd /opt/Internet.nl
1177+
1178+ SERVICE=worker-nassl
1179+ REPLICAS=$$WORKER_REPLICAS
1180+ COMPOSE_CMD="docker compose --env-file=docker/defaults.env --env-file=docker/host.env --env-file=docker/local.env"
1181+
1182+ OLD_CONTAINERS=$$($$COMPOSE_CMD ps --format "{{ .Name }}"|grep "$$SERVICE")
1183+
1184+ # bring up new containers, wait until healthy
1185+ $$COMPOSE_CMD up --no-deps --no-recreate --wait --scale="$$SERVICE=$$(($$REPLICAS*2))" "$$SERVICE"
1186+
1187+ # graceful shutdown and remove old containers
1188+ docker rm --force "$$OLD_CONTAINERS"
1189+
1190+ # restore replica number to original
1191+ $$COMPOSE_CMD scale $$SERVICE=$$REPLICAS
1192+
1193+ restart_slow_worker_cron :
1194+ content : |
1195+ #!/bin/sh
1196+
1197+ # restart slow worker every day to prevent slow memory leaks
1198+ # as the slow worker can run very long tasks (eg: report generation)
1199+ # we first start a new container before stopping the previous one
1200+
1201+ set -e
1202+
1203+ cd /opt/Internet.nl
1204+
1205+ SERVICE=worker-slow
1206+ REPLICAS=$$WORKER_SLOW_REPLICAS
1207+ COMPOSE_CMD="docker compose --env-file=docker/defaults.env --env-file=docker/host.env --env-file=docker/local.env"
1208+
1209+ OLD_CONTAINERS=$$($$COMPOSE_CMD ps --format "{{ .Name }}"|grep "$$SERVICE")
1210+
1211+ # bring up new containers, wait until healthy
1212+ $$COMPOSE_CMD up --no-deps --no-recreate --wait --scale="$$SERVICE=$$(($$REPLICAS*2))" "$$SERVICE"
1213+
1214+ # graceful shutdown and remove old containers
1215+ docker rm --force "$$OLD_CONTAINERS"
1216+
1217+ # restore replica number to original
1218+ $$COMPOSE_CMD scale $$SERVICE=$$REPLICAS
1219+
11491220
11501221 docker_image_prune :
11511222 content : |
0 commit comments