gistfile1.txt
· 337 B · Text
Bruto
services:
watchdog:
image: docker:cli
container_name: watchdog
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./watchdog.sh:/watchdog.sh
environment:
- CPU_THRESHOLD=95
- CHECK_INTERVAL=10
- CONTAINER_PREFIX=hldm
entrypoint: [ "sh", "/watchdog.sh" ]
| 1 | services: |
| 2 | watchdog: |
| 3 | image: docker:cli |
| 4 | container_name: watchdog |
| 5 | restart: unless-stopped |
| 6 | volumes: |
| 7 | - /var/run/docker.sock:/var/run/docker.sock |
| 8 | - ./watchdog.sh:/watchdog.sh |
| 9 | environment: |
| 10 | - CPU_THRESHOLD=95 |
| 11 | - CHECK_INTERVAL=10 |
| 12 | - CONTAINER_PREFIX=hldm |
| 13 | entrypoint: [ "sh", "/watchdog.sh" ] |
watchdog.sh
· 479 B · Bash
Bruto
#!/bin/bash
THRESHOLD="${CPU_THRESHOLD}"
INTERVAL="${CHECK_INTERVAL}"
TARGET_PREFIX="${CONTAINER_PREFIX}"
while true; do
docker stats --no-stream --format "{{.Name}} {{.CPUPerc}}" | while read name cpu; do
cpu_val=$(echo "$cpu" | tr -d '%')
if [[ "$name" == $TARGET_PREFIX* && $(echo "$cpu_val > $THRESHOLD" | bc) -eq 1 ]]; then
echo "[watchdog] High CPU: $name using $cpu_val%, restarting..."
docker restart "$name"
fi
done
sleep "$INTERVAL"
done
| 1 | #!/bin/bash |
| 2 | |
| 3 | THRESHOLD="${CPU_THRESHOLD}" |
| 4 | INTERVAL="${CHECK_INTERVAL}" |
| 5 | TARGET_PREFIX="${CONTAINER_PREFIX}" |
| 6 | |
| 7 | while true; do |
| 8 | docker stats --no-stream --format "{{.Name}} {{.CPUPerc}}" | while read name cpu; do |
| 9 | cpu_val=$(echo "$cpu" | tr -d '%') |
| 10 | if [[ "$name" == $TARGET_PREFIX* && $(echo "$cpu_val > $THRESHOLD" | bc) -eq 1 ]]; then |
| 11 | echo "[watchdog] High CPU: $name using $cpu_val%, restarting..." |
| 12 | docker restart "$name" |
| 13 | fi |
| 14 | done |
| 15 | sleep "$INTERVAL" |
| 16 | done |