Skip to content

Orphaned PHP processes (zombies) created by internal crond #2645

@bondskin

Description

@bondskin

Welcome!

  • I have read the documentation and my problem was not listed in the help section.
  • I have searched open and closed issues and my problem was not mentioned before.
  • I have verified I am using the latest version available. You can check the latest release here.
  • I agree to follow this project's Code of Conduct.

What did you do?

While running the speedtest-tracker container, I observed a steady increase in zombie processes. Investigation shows that busybox crond (PID 403238 in my case) is spawning PHP processes that exit but are not reaped by the parent.

Process Tree Snippet:

UID PID PPID C STIME TTY TIME CMD
root 403238 402818 0 14:14 ? 00:00:00 busybox crond -f -S -l 5
[...] 410301 403238 Z [php]

Potential Trigger:
This behavior seems to correlate with high system load or network instability. It appears the PHP binary called by the scheduler doesn't exit cleanly or the crond fails to handle the SIGCHLD signal correctly.

docker inspect speedtest-tracker --format '{{.Config.Image}} {{.Image}}'
lscr.io/linuxserver/speedtest-tracker:latest sha256:e9a547fe4e1b8bbb0c888f4aa6ae5e0c7905a6aae6fe32a144ebe86b477ad7bd

Could this be also caused by the healthcheck?
Suspected Trigger:
Healthcheck
The container uses the following healthcheck: test: ["CMD-SHELL", "curl -fSs http://localhost:80/api/healthcheck | jq -r .message || exit 1"]

Expected Behavior

no orphaned processes

Steps to Reproduce

I tried to explain it.

Deployment Environment

Docker Compose

What is your environment & configuration?

---
services:
  speedtest-tracker:
    image: lscr.io/linuxserver/speedtest-tracker:latest
    container_name: speedtest-tracker
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - APP_KEY="base64:RHsgHHZs+1pviG7aXXX"
      - APP_URL="https://xxx"
      - DB_CONNECTION=sqlite
      - SPEEDTEST_SCHEDULE="3 5 * * *"
      - SPEEDTEST_SERVERS=31469
      - DB_HOST= #optional
      - DB_PORT= #optional
      - DB_DATABASE= #optional
      - DB_USERNAME= #optional
      - DB_PASSWORD= #optional
      - DISPLAY_TIMEZONE=Europe/Berlin #optional
      - PRUNE_RESULTS_OLDER_THAN=90 #optional
    volumes:
      - /home/mcp/docker/speedtest/data:/config
    tmpfs:
      - /run:exec,rw,size=64m  
      - /tmp:rw,size=128m
      - /config/www/storage/framework/cache:rw,size=64m
      - /config/www/storage/framework/sessions:rw,size=64m
    networks: 
      - net_dmz
    ports:
     - 8980:80
    mem_limit: 512m
    cpus: 0.3
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "curl -fSs http://localhost:80/api/healthcheck | jq -r .message || exit 1"]
      interval: 125s
      retries: 3
      start_period: 30s
      timeout: 10s

networks:
  net_dmz:
    external: true

❯ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 13 (trixie)
Release: 13
Codename: trixie
❯ uname -r
6.12.63+deb13-amd64
❯ docker version
Client: Docker Engine - Community
Version: 29.1.4
API version: 1.52
Go version: go1.25.5
Git commit: 0e6fee6
Built: Thu Jan 8 19:56:57 2026
OS/Arch: linux/amd64
Context: default

Server: Docker Engine - Community
Engine:
Version: 29.1.4
API version: 1.52 (minimum version 1.44)
Go version: go1.25.5
Git commit: 08440b6
Built: Thu Jan 8 19:56:57 2026
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: v2.2.1
GitCommit: dea7da592f5d1d2b7755e3a161be07f43fad8f75
runc:
Version: 1.3.4
GitCommit: v1.3.4-0-gd6d73eb8
docker-init:
Version: 0.19.0
GitCommit: de40ad0

Application Information

docker exec speedtest-tracker ps aux G cron
root          39  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-cron
root         258  0.0  0.0   1628   984 ?        Ss   14:26   0:00 busybox crond -f -S -l 5

Parent Process (PPID): busybox crond -f -S -l 5

Child Process (Zombie): [php] <defunct>

docker exec -it speedtest-tracker php /app/www/artisan about --json
{"environment":{"application_name":"Speedtest Tracker","laravel_version":"12.41.1","php_version":"8.4.16","composer_version":"2.9.3","environment":"production","debug_mode":false,"url":"speed.skynet22.org","maintenance_mode":false,"timezone":"UTC","locale":"en"},"cache":{"config":true,"events":true,"routes":true,"views":true},"drivers":{"broadcasting":"null","cache":"database","database":"sqlite","logs":"stderr","mail":"smtp","queue":"database","session":"database"},"storage":{"\/app\/www\/public\/storage":false},"filament":{"version":"v4.1.0","packages":"filament, forms, notifications, support, tables, actions, infolists, schemas, widgets","views":"NOT PUBLISHED","blade_icons":"CACHED","panel_components":"CACHED"},"livewire":{"livewire":"v3.7.1"},"speedtest_tracker":{"version":"v1.13.5"}}

What browser(s) are you seeing the problem on?

Safari

Logs

docker exec speedtest-tracker ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0    436   104 ?        Ss   14:26   0:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
root          17  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise s6-linux-init-shutdownd
root          18  0.0  0.0    208    64 ?        Ss   14:26   0:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -d3 -c /run/s6/basedir -g 3000 -C -B
root          36  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise svc-speedtest-tracker
root          37  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-php-fpm
root          38  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-nginx
root          39  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-cron
root          40  0.0  0.0    220    72 ?        S    14:26   0:00 s6-supervise s6rc-fdholder
root          41  0.0  0.0    220    80 ?        S    14:26   0:00 s6-supervise s6rc-oneshot-runner
root          49  0.0  0.0    208    68 ?        Ss   14:26   0:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -v0 -E -l0 -i data/rules -- /package/admin/s6/command/s6-sudod -t 30000 -- /package/admin/s6-rc/command/s6-rc-oneshot-run -l ../.. --
abc          252  0.1  0.4 103244 66812 ?        Ss   14:26   0:00 php artisan queue:work --tries=3 --no-ansi -q
root         254  0.0  0.1  65204 27080 ?        Ss   14:26   0:00 php-fpm: master process (/etc/php84/php-fpm.conf)
root         256  0.0  0.0  61720  7644 ?        Ss   14:26   0:00 nginx: master process /usr/sbin/nginx -e stderr
root         258  0.0  0.0   1628   984 ?        Ss   14:26   0:00 busybox crond -f -S -l 5
abc          285  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          286  0.0  0.0  62184  3764 ?        S    14:26   0:00 nginx: worker process
abc          287  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          288  0.0  0.0  62184  3776 ?        S    14:26   0:00 nginx: worker process
abc          289  0.0  0.0  61964  3192 ?        S    14:26   0:00 nginx: cache manager process
abc          291  0.4  0.2  92640 45120 ?        S    14:26   0:01 php-fpm: pool www
abc          292  0.7  0.3  99088 51568 ?        S    14:26   0:03 php-fpm: pool www
root         337 40.0  0.0   2852  1904 ?        Rs   14:34   0:00 ps aux
❯ docker exec speedtest-tracker ps aux G cron
root          39  0.0  0.0    220    76 ?        S    14:26   0:00 s6-supervise svc-cron
root         258  0.0  0.0   1628   984 ?        Ss   14:26   0:00 busybox crond -f -S -l 5

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs reviewA maintainer needs to look at this issue stillquestionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions