Janitorr enforces queue-cleaning, media hygiene, and malware-blocking rules for the Arr + Jellyfin automation stack.
This page documents the Janitorr container and its application.yml runtime configuration.
- Container:
janitorr
- Image:
ghcr.io/schaka/janitorr:jvm-stable
- Stack: Smithflix Stack
- Docker network:
smithflix_default
- Restart policy:
unless-stopped
- No host port is published; Janitorr is an internal worker
¶ Config and Data Paths
- Config file:
/srv/docker/janitorr/config/application.yml
- Media mount:
/media -> /media
- Janitorr logs and backups live inside
/srv/docker/janitorr/config alongside config history files
- No LAN or public proxy host is configured on
2026-04-07
- The service communicates with Arr/Jellyfin over the internal Docker network only
¶ Authentication and Secret Locations
- Janitorr reads API keys via environment variables:
JELLYFIN_API_KEY, SONARR_API_KEY, RADARR_API_KEY, and JELLYSEERR_API_KEY (rotate them if they appear in chat)
- The Postgres database backing Janitorr lives inside the image and is not exposed; credentials are not stored in the wiki
- Janitorr performs policy-based deletions: e.g., movies older than 30–120 days depending on size and tag-based rules with the
janitorr_daily tag
- Episode cleanup also runs nightly, creating “Leaving Soon” markers for shows; the feature can be toggled in
application.yml
- If Janitorr cannot reach Jellyfin/Sonarr/Radarr, inspect the Docker network and ensure each service is healthy
¶ Monitoring and Logs
- Docker logging driver is
json-file
- Logs surface in
docker logs janitorr; the container does not expose an HTTP healthcheck
- The Jenkins schedule logs show significant cleanup activity around every hour
¶ Backup and Restore
- Preserve
/srv/docker/janitorr/config when running Duplicati backups; it contains both the YAML config and historical .bak copies
- After restore, restart the container so it re-reads
application.yml
¶ Failure Modes and Recovery
- Misconfiguring the API keys stops Janitorr from deleting anything while the container remains running
- Clearing
/media permissions prevents file deletions even though Janitorr log entries look normal
- The service intentionally runs with
media-deletion.enabled=true and tag-based-deletion.enabled=false; verify any change in application.yml before redeploying