Build1 distinct publisher3 min readUpdated
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
Compiled by The EngineerSomething wrong?How this is made
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 [3]. 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 [5]. 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 [7][6]. The clean timer runs 15 minutes after boot and then once a day [7], so the gap between the last EAC3 transcode and the directory going away is 10 days plus up to a day of timer latency [1]. A household that hits Dolby Digital Plus content most weeks keeps the timestamps warm and never learns any of this [8]. One that mostly direct-plays does not.
Diagnosis then works against the operator. The client says "Conversion failed. The transcoder failed to start up." [9], 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 [10], and confirming the cause means leaving Plex entirely to ask when the clean timer last fired [18]. Restarting plexmediaserver recreates the whole tree and EAC3 works again at once [11], which is why so many threads end in a shrug [12]. The restart is also what destroys the evidence, and the fault cannot return for another 10 days [2], 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 [1]. 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 [5].
The prescribed exemption is one file in /etc/tmpfiles.d [13], and the case of a single letter carries the whole fix. Lowercase x spares the path and everything beneath it [13]; uppercase X spares only the directory while its contents keep ageing out, which reproduces the outage with the pms-* parent still standing [14]. Because globs in exclusion rules are evaluated when cleaning runs [16], the rule keeps matching after a restart mints a new per-instance UUID in the path [3]. Worth verifying that systemd actually loaded the drop-in rather than assuming it [15], since the failure it prevents is invisible for ten days either way.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
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).
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.
The EAE watch folder lives under a per-instance temp directory of the form /tmp/pms-<uuid>/EasyAudioEncoder/.
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.
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.
The client-side error is "Conversion failed. The transcoder failed to start up."
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Mechanistically specific but single-source and uncorroborated
The account is internally coherent and unusually concrete: reproduced tmp.conf rule lines, the clean timer cadence, a named log signature with exit code 187, diagnostic commands, a one-line tmpfiles.d exclusion, the x-versus-X distinction, and a forced-clean verification step. That makes the systemd-side mechanics readily checkable by any reader. Against that, the cluster contains one source from one publisher, with no link to Plex documentation, an issue tracker, a Debian release note, or the forum threads it characterizes; the log excerpt and UUID path appear illustrative rather than captured; and no Plex version is stated. Evidence is therefore adequate for a practitioner to test but not established.
No usable adoption measurement
The only adoption-flavoured datapoint is a reported distro default change in Debian 13. Nothing in the supplied material quantifies how many Plex hosts are affected, how many operators have hit the failure, or whether anyone besides the author has deployed the tmpfiles.d exclusion. Deriving a figure would require inventing deployment or incidence facts the source does not provide.
Roughly aligned, with mild unearned certainty
Scope discipline is good: the author claims a narrow, mechanism-level failure in one code path and does not extrapolate to Plex being broadly broken or to any vendor narrative. The mild positive gap comes from tone rather than substance -- the causal chain, the Debian 13 default and the 'confused forum threads' pattern are presented as settled fact with no citations, and the dramatic 'worst class of failure' framing plus a synthetic-looking log sample assert more certainty than one uncorroborated post can carry.
Low-to-moderate: self-promotional cross-linking, no vendor stake
This is an individual practitioner post on a developer publishing platform. No commercial relationship with Plex, Debian, systemd or Proxmox is disclosed or implied, and the recommended remedy is a free one-line OS config change rather than a product. The distortion pressure that does exist is engagement-driven: the post cross-promotes the author's own earlier Longhorn write-up and uses a dramatic hook, and platform incentives reward confidently authoritative deep-dives over hedged, cited ones -- consistent with the absence of any external references.
Moderate on mechanism, weak on attribution
Confidence is split. The systemd half of the story -- default 10-day /tmp age rule, once-daily clean timer, exclusion semantics for x versus X, globs evaluated at cleaning time -- is standard documented behaviour restated accurately enough to act on, and the derived timing windows follow directly from it. The Plex half -- create-once temp tree with no health check, EAE ignoring the web-UI transcoder temp setting, the Debian 13 default flip -- rests entirely on one uncited author. With one publisher, no adoption measurement and a truncated body, moderate confidence is the ceiling.
build
The duplicate def that ate the trim, and the lint rule nobody was running1 distinct publisher
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
build
qm start said nothing, the UI said stopped, and only host dmesg named the passthrough failure1 distinct publisher
build
Two timeout numbers, not new code, fixed a nightly job that failed 2-3 mornings a week1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 21, 2026