Skip to content

BuildNot yet confirmed elsewhere1 publisher3 min readPublished

Debian 13 cleans /tmp, and Plex's EAC3 transcoding dies ten days later

No Plex update, no config edit: a default systemd timer reaps the scratch directory EasyAudioEncoder was handed at startup, and Plex never checks whether it still exists.

The Engineer · Build desk

How we use AISend a correction

What happened

  • Debian 13 turned on age-based /tmp cleaning by default, so hosts upgraded from Debian 11 or 12 inherit the behaviour with no Plex change.
  • Plex's EAC3 path runs through EasyAudioEncoder, whose watch folder sits at /tmp/pms-<uuid>/EasyAudioEncoder/.
  • Plex builds that tree once at service start, with no health check, no recreation logic and no periodic touch.
  • The result is a server with green status and working H.264 playback that fails every EAC3 transcode.

Why it matters

  • constraint Exposure is set by viewing habit rather than configuration, so the operator most likely to hit it is the one least able to reproduce it while looking.
  • decision The one-command fix and the evidence-destroying action are the same command, which pushes the real repair out to whoever is still watching ten days later.
  • precedent A distribution default now governs how long another vendor's inter-process directory survives, which puts every create-once watch-folder daemon under /tmp one policy change from the same outage.
  • exposure An operator who applies the exemption with uppercase X believes the problem is closed while the subtree that actually matters keeps ageing out.

EAE's watch folder is not a cache Plex can rebuild on demand. It is the interface between two processes: Plex drops audio in, EAE picks it up and writes the converted file back [2]. Both ends resolved that path once, when plexmediaserver started, and nothing in the running system re-checks it or touches it to keep it fresh [18]. That makes it durable state parked in the one directory the operating system reserves the right to empty.

The reaping rule is stricter than it sounds. systemd-tmpfiles removes an entry only when its access, modification and change times are all past the threshold, and the shipped rule sets that threshold at 10 days for /tmp [5][4]. The clean timer runs 15 minutes after boot and then once a day [5], so the gap between the last EAC3 transcode and the directory going away is 10 days plus up to a day of timer latency [14]. A household that hits Dolby Digital Plus content most weeks keeps the timestamps warm and never learns any of this [19]. One that mostly direct-plays does not.

Diagnosis then works against the operator. The client says "Conversion failed. The transcoder failed to start up." [6], which describes nothing. The signature the dev.to writeup gives is exit code 187 alongside "EAE watchfolder is not writable" in Plex Media Server.log [7], and confirming the cause means leaving Plex entirely to ask when the clean timer last fired [12]. Restarting plexmediaserver recreates the whole tree and EAC3 works again at once [20], which is why so many threads end in a shrug [21]. The restart is also what destroys the evidence, and the fault cannot return for another 10 days [15], long enough that nobody still believes there is a pattern.

None of this required a vendor to ship a bug. Debian 13 enabled automatic /tmp cleaning by default, and hosts that ran for years on Debian 11 or 12 acquire the failure mode by upgrading, with no Plex setting touched [17]. The lifetime of one application's IPC directory is now decided by another project's default, and the only party that knows the directory matters is a daemon that never mentions it again after startup [18].

The prescribed exemption is one file in /etc/tmpfiles.d [8], and the case of a single letter carries the whole fix. Lowercase x spares the path and everything beneath it [8]; uppercase X spares only the directory while its contents keep ageing out, which reproduces the outage with the pms-* parent still standing [9]. Because globs in exclusion rules are evaluated when cleaning runs [11], the rule keeps matching after a restart mints a new per-instance UUID in the path [16]. Worth verifying that systemd actually loaded the drop-in rather than assuming it [10], since the failure it prevents is invisible for ten days either way.

What to watch

  • Whether Plex adds an existence check or recreation step for the EAE watch folder, which would make the tmpfiles.d exemption unnecessary.
  • Whether other distributions follow Debian 13 in enabling age-based /tmp cleaning by default on upgrade.
  • Whether community advice settles on lowercase x or propagates the uppercase X variant that fails one level down.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence44
Adoption
Insufficient
Hype gap+8
Incentives32
Confidence45
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Plex handles most audio transcoding with its bundled ffmpeg fork, but Dolby Digital Plus (EAC3) is licensed differently, so Plex ships a separate binary called EasyAudioEncoder (EAE).

    ReportedSupportedView cited source
  2. [2]

    EAE is a watch-folder daemon rather than a normal stdin/stdout encoder: Plex drops audio into a directory, EAE picks it up, converts it, and writes the result back.

    ReportedSupportedView cited source
  3. [3]

    The EAE watch folder lives under a per-instance temp directory of the form /tmp/pms-<uuid>/EasyAudioEncoder/.

    ReportedSupportedView cited source

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · August 21, 2026

    Systemd-tmpfiles vs Plex: When /tmp Aging Breaks EAC3 Transcoding

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories