Skip to content

Commit 75dde4c

Browse files
committed
Slow worker restart
1 parent e2d0ae4 commit 75dde4c

File tree

1 file changed

+83
-12
lines changed

1 file changed

+83
-12
lines changed

docker/docker-compose.yml

Lines changed: 83 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)