Skip to content

[BUG] Calibre process hangs indefinitely (content server never starts) after container restart/recreate, fixed by restarting svc-de #216

Description

@ivan-pinatti

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

After a container restart of an already-configured, previously-working instance (either a plain stop/start cycle, or a docker compose up -d --force-recreate), the calibre desktop application process launches but never actually initializes: it sits essentially idle and the content server (port 8081) never opens.

I confirmed this is a genuine hang, not slow startup, by sampling the container's process list and cgroup CPU stats every 2 seconds through a live occurrence:

  • The /opt/calibre/bin/calibre process starts, then does no measurable work — CPU usage decays from ~0.5% down to ~0.2%, and RSS memory stays completely static — for 50+ seconds straight.
  • The desktop GUI/noVNC (Selkies) session on port 8181 comes up fine and is reachable throughout; only the calibre application itself (and by extension its content server) is stuck.
  • Restarting the desktop service inside the container (s6-svc -r /run/service/svc-de) reliably fixes it: the calibre process is replaced by a fresh one (new PID), which immediately does real work (CPU usage jumps to 70-80%), and the content server opens within 2-4 seconds.

This is reliably reproducible: across many container recreate/restart cycles in my own testing, it happened close to 100% of the time on restart, never on the very first boot of a brand-new container.

I also ruled out CPU quota as the (sole) cause: the container was originally running with a 0.5 CPU cgroup limit, which did show real throttling in isolation (cpu.stat showed nr_throttled events and a slow, but eventually successful, ~60s startup with the CPU cap in place). Bumping the limit to 1 or 2 full CPUs eliminated that throttling and made an isolated restart reliably succeed in 4-20s. However, under load from a broader automation script that restarts several containers around the same time, the exact same hang (0% CPU, no progress) still occurs regardless of whether the container has 1 or 2 full CPUs available, which points to a startup race rather than CPU starvation.

Expected Behavior

The calibre process should either start successfully on the first attempt after a container restart, or fail fast/log an error, rather than silently hanging indefinitely with no log output and no CPU activity.

Steps To Reproduce

  1. Start the container fresh and let it fully initialize (content server on 8081 reachable, GUI on 8181 reachable).
  2. docker stop calibre && docker start calibre (or docker compose up -d --force-recreate calibre).
  3. Observe: the GUI/noVNC session (8181) comes back, but the content server (8081) never becomes reachable. docker exec calibre ps aux shows the calibre process present but essentially idle (near-0% CPU) indefinitely.
  4. Workaround: docker exec calibre s6-svc -r /run/service/svc-de — the calibre process restarts and the content server becomes reachable within a few seconds.

Environment

- Image: lscr.io/linuxserver/calibre:9.8.0 (linuxserver.io version v9.8.0-ls399, build-date 2026-05-01T04:52:03+00:00)
- Base image: ghcr.io/linuxserver/baseimage-selkies:ubunturesolute
- Runtime: rootless Podman (should reproduce under Docker too, since the hang is inside the container's own process, not runtime-specific)
- Host: Linux, 32 cores / 30GB RAM, not resource constrained

CPU architecture

x86-64

Docker creation

calibre:
  image: lscr.io/linuxserver/calibre:9.8.0
  environment:
    PUID: "<uid>"
    PGID: "<gid>"
  ports:
    - "8080:8080"
    - "8181:8181"
    - "9091:9091"
  volumes:
    - ./config:/config
    - ./library:/data/media/calibre-library

Container logs

[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de

No further log output appears once the calibre process hangs; it's silent, not erroring.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions