[Unit] Description=breadarr media acquisition daemon After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/usr/bin/breadarrd # `always`, not `on-failure` — a clean-but-wrong exit (e.g. the background # grab/import loop falling out of its own retry logic) should still trigger # a restart, not leave the daemon dead until someone notices by hand. Restart=always RestartSec=2 # 0022, not a restrictive 0077 — breadarrd writes into media library folders # that Jellyfin (or another user/process) needs to read. UMask=0022 RuntimeDirectory=breadarr RuntimeDirectoryMode=0700 KillSignal=SIGTERM # Transcode jobs can run for minutes; 5s was cutting them off on stop. TimeoutStopSec=180 # Modest hardening valid in a user unit. Skip ProtectHome (library + # config live under $HOME) and MemoryDenyWriteExecute (ort/onnxruntime # may need JIT / RWX mappings). NoNewPrivileges=yes RestrictSUIDSGID=yes LockPersonality=yes [Install] WantedBy=default.target