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
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
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [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).
- [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.
- [3]
The EAE watch folder lives under a per-instance temp directory of the form /tmp/pms-<uuid>/EasyAudioEncoder/.
- [4]
On most modern distros /usr/lib/tmpfiles.d/tmp.conf contains rules clearing /tmp entries older than 10 days and /var/tmp after 30 days.
- [5]
systemd-tmpfiles-clean.timer fires 15 minutes after boot and then once a day, removing anything under /tmp whose access, modification and change times are all older than the age threshold.
- [6]
The client-side error is "Conversion failed. The transcoder failed to start up."
- [7]
The signature in Plex Media Server.log is "EAE watchfolder is not writable" plus "Transcode runner appears to have died" and job exit code 187.
- [8]
The recommended fix is a drop-in file /etc/tmpfiles.d/plex-eae.conf containing "x /tmp/pms-*"; lowercase x excludes the matching paths and their entire contents from cleaning.
- [9]
Uppercase X excludes only the directory itself, so its contents still age out: the pms-* directory survives but the EasyAudioEncoder subtree inside it gets reaped.
- [10]
The drop-in can be verified with systemd-tmpfiles --cat-config | grep -A1 plex-eae.
- [11]
Globs are legal in tmpfiles.d exclusion rules and are evaluated at cleaning time.
- [12]
The cleanup timer can be confirmed as the cause with systemctl list-timers systemd-tmpfiles-clean.timer and ls -ld /tmp/pms-*, which shows the path or its pms-* parent missing.
- [13]
The failure mode applies to Plex on any systemd-based Linux, including bare metal, a VM, or an unprivileged LXC container on Proxmox.
- [14]
The window between the last EAC3 transcode and deletion of the watch folder is 10 days plus up to one further day of timer latency, so as much as 11 days can pass before the directory disappears.
- [15]
Because a restart recreates the tree with fresh timestamps, the next reaping cannot happen sooner than 10 days after the restart, so each recurrence is separated from the last fix by at least a week and a half.
- [16]
Since the exclusion glob is evaluated when cleaning runs, it continues to match after a restart generates a new per-instance UUID in the /tmp/pms-<uuid> path.
- [17]
Debian 13 enabled automatic /tmp cleaning by default, so setups that ran fine for years on Debian 11 or 12 inherit the failure mode on upgrade without any Plex setting being changed.
- [18]
Plex creates that directory tree exactly once, when the plexmediaserver service starts; there is no health check on it, no recreation logic and no periodic touch, and Plex assumes the directory is still there for as long as the service runs.
- [19]
Heavy daily EAC3 use keeps the watch folder's timestamps fresh so the problem never appears; in households that mostly direct-play and only occasionally hit EAC3 content, the folder sits idle, crosses the 10-day line and is reaped.
- [20]
Running systemctl restart plexmediaserver recreates the whole /tmp/pms-* tree and EAC3 transcodes work again instantly.
- [21]
The restart fixes the symptom and destroys the evidence, producing forum threads that end with "restarted it and it works now, no idea why", and the fault returns after another ten days of idle EAE.
- [22]
A Plex server with 90 days of uptime, green service status and working H.264 playback can still fail every EAC3 transcode with a generic "Conversion failed" error.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toSystemd-tmpfiles vs Plex: When /tmp Aging Breaks EAC3 Transcoding
1 article · August 21, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.