Schaka / janitorr

Cleans your Radarr, Sonarr, Jellyseerr and Jellyfin before you run out of space
GNU General Public License v3.0
262 stars 5 forks source link

Cannot start Janitorr #56

Closed NLopesivg closed 1 week ago

NLopesivg commented 2 weeks ago

Hello

When starting docker i gey this error

` 2024-08-27T13:40:14.395+01:00 INFO 1 --- [ main] c.g.s.janitorr.JanitorrApplicationKt : Starting JanitorrApplicationKt using Java 21.0.4 with PID 1 (/app/classes started by root in /) 2024-08-27T13:40:14.399+01:00 INFO 1 --- [ main] c.g.s.janitorr.JanitorrApplicationKt : No active profile set, falling back to 1 default profile: "default" 2024-08-27T13:40:15.859+01:00 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-08-27T13:40:15.874+01:00 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-08-27T13:40:15.874+01:00 INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.26] 2024-08-27T13:40:15.925+01:00 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-08-27T13:40:15.927+01:00 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1445 ms 2024-08-27T13:40:16.252+01:00 WARN 1 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mediaCleanupSchedule' defined in file [/app/classes/com/github/schaka/janitorr/cleanup/MediaCleanupSchedule.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mediaServer' defined in class path resource [com/github/schaka/janitorr/mediaserver/config/MediaServerConfig.class]: Unsatisfied dependency expressed through method 'mediaServer' parameter 2: Error creating bean with name 'application-com.github.schaka.janitorr.config.ApplicationProperties': Could not bind properties to 'ApplicationProperties' : prefix=application, ignoreInvalidFields=false, ignoreUnknownFields=true 2024-08-27T13:40:16.256+01:00 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2024-08-27T13:40:16.272+01:00 INFO 1 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-08-27T13:40:16.293+01:00 ERROR 1 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Failed to bind properties under 'application' to com.github.schaka.janitorr.config.ApplicationProperties:

Reason: java.lang.NullPointerException: Parameter specified as non-null is null: method com.github.schaka.janitorr.config.ApplicationProperties.<init>, parameter mediaDeletion

Action:

Update your application's configuration

Press ANY KEY to close this window `

Config file is the example with only de API key added

Can you help?

Schaka commented 2 weeks ago

Please provide your compose file and your application.yml

You either didn't map the config file into your container correctly or the file is incorrect. You're missing the media-deletion key. These 2 are the scenarios in which it can be missing.

NLopesivg commented 2 weeks ago

I am using unraid so i don't have a compose file but i attached a screenshot of the configs

Janitorr container

And here is the application.yml

server: port: 8978

File system access (same mapping as Sonarr, Radarr and Jellyfin) is required to delete TV shows by season and create "Leaving Soon" collections in Jellyfin

Currently, Jellyfin does not support an easy way to add only a few seasons or movies to a collection, we need access to temporary symlinks

Additionally, checks to prevent deletion on currently still seeding media currently require file system access as well

file-system: access: true validate-seeding: true # validates seeding by checking if the original file exists and skips deletion - turning this off will send a delete to the *arrs even if a torrent may still be active leaving-soon-dir: "/data/media/leaving-soon" # A directory this container can write to and Jellyfin can find under the same path - this will contain new folders with symlinks to files for Jellyfin's "Leaving Soon" collections from-scratch: true # Clean up entire "Leaving Soon" directory and rebuild from scratch - this can help with clearing orphaned data - turning this off can save resources (less writes to drive) free-space-check-dir: "/" # This is the default directory Janitorr uses to check how much space is left on your drives. By default, it checks the entire root - you may point it at a specific folder

application: dry-run: true whole-tv-show: false # activating this will treat as a whole show as recently download/watched from a single episode, rather than that episode's season - shows will be deleted as a whole whole-show-seeding-check: false # Turning this off, disables the seeding check entirely if whole-tv-show is enabled. Activating this check will keep a whole TV show if any season is still seeding (requires file access). leaving-soon: 14d # 14 days before a movie is deleted, it gets added to a "Leaving Soon" type collection (i.e. movies that are 76 to 89 days old) exclusion-tag: "janitorr_keep" # Set this tag to your movies or TV shows in the *arrs to exclude media from being cleaned up

media-deletion: enabled: true movie-expiration:

Percentage of free disk space to expiration time - if the highest given number is not reached, nothing will be deleted

  # If filesystem access is not given, disk percentage can't be determined. As a result, Janitorr will always choose the largest expiration time.
  5: 15d # 15 days
  10: 30d # 1 month - if a movie's files on your system are older than this, they will be deleted
  15: 30d # 2 months
  20: 90d # 3 months
season-expiration:
  5: 15d # 15 days
  10: 20d # 20 days - if a season's files on your system are older than this, they will be deleted
  15: 60d # 2 months
  20: 120d # 4 months

tag-based-deletion: enabled: true minimum-free-disk-percent: 100 schedules:

clients: sonarr: enabled: true url: "http://localhost:8989" api-key: "c770a6f7e1a74ea99b582cf62e37fc84" delete-empty-shows: true # If a show that was "touched" by Janitorr contains no files and has no monitored seasons at all, it will get deleted as part of orphan cleanup radarr: enabled: true url: "http://localhost:7878" api-key: "c2b17d521b8845528aa6ddd8c9378925"

You can only choose one out of Jellyfin or Emby.

User login is only needed if deletion is enabled.

jellyfin: enabled: true url: "http://localhost:8096" api-key: "cf8121c97a77498c80b15a2b71d7cac1" username: janitorr password: janitorr delete: true # Jellyfin setup is required for JellyStat. However, if you don't want Janitorr to send delete requests to the Jellyfin API, disable it here

You can only choose one out of Jellyfin or Emby. Emby support is secondary.

User login is only needed if deletion is enabled.

emby: enabled: false url: "http://localhost:8096" api-key: "4da8d93992804489ba2d1f0e31b8316c" username: Janitorr password: janitorr delete: true # Emby setup is required for JellyStat. However, if you don't want Janitorr to send delete requests to the Emby API, disable it here jellyseerr: enabled: true url: "http://localhost:5055" api-key: "MTcyMjc4MDU2ODQ4MGI4YzI4N2RmLWNiNDAtNDMxOS05NTNjLThlMzQwOWQ1Yjc4Mw==" match-server: false # Enable if you have several Radarr/Sonarr instances set up in Jellyseerr. Janitorr will match them by the host+port supplied in their respective config settings. jellystat: enabled: true whole-tv-show: false # Enabling this will make Jellystat consider TV shows as a whole if any episode of any season has been watched url: "http://jellystat:3000" api-key: "9779f978-1b23-4582-982a-ad6f5d7f7649"

NLopesivg commented 2 weeks ago

Janitorr container 1

Here you can see the mapping better

Schaka commented 2 weeks ago

And the application.yml is readable by the user you're starting Janitorr with AND of course in the the directory you supplied?

Can you please edit your post and format the yml correctly by marking it as code? It'll give me a chance to tell if you messed up formatting somehow.

To me it seems the yml file wasn't mapped into the container correctly. Janitorr loads the application.yml and overwrites it with your config where necessary. This one is missing media-deletion. So if you never provide anything to overwrite, it will complain that things are missing.

NLopesivg commented 2 weeks ago
server:
  port: 8978

# File system access (same mapping as Sonarr, Radarr and Jellyfin) is required to delete TV shows by season and create "Leaving Soon" collections in Jellyfin
# Currently, Jellyfin does not support an easy way to add only a few seasons or movies to a collection, we need access to temporary symlinks
# Additionally, checks to prevent deletion on currently still seeding media currently require file system access as well
file-system:
  access: true
  validate-seeding: true # validates seeding by checking if the original file exists and skips deletion - turning this off will send a delete to the *arrs even if a torrent may still be active
  leaving-soon-dir: "/data/media/leaving-soon" # A directory this container can write to and Jellyfin can find under the same path - this will contain new folders with symlinks to files for Jellyfin's "Leaving Soon" collections
  from-scratch: true # Clean up entire "Leaving Soon" directory and rebuild from scratch - this can help with clearing orphaned data - turning this off can save resources (less writes to drive)
  free-space-check-dir: "/" # This is the default directory Janitorr uses to check how much space is left on your drives. By default, it checks the entire root - you may point it at a specific folder

application:
  dry-run: true
  whole-tv-show: false # activating this will treat as a whole show as recently download/watched from a single episode, rather than that episode's season - shows will be deleted as a whole
  whole-show-seeding-check: false # Turning this off, disables the seeding check entirely if whole-tv-show is enabled. Activating this check will keep a whole TV show if any season is still seeding (requires file access).
  leaving-soon: 14d # 14 days before a movie is deleted, it gets added to a "Leaving Soon" type collection (i.e. movies that are 76 to 89 days old)
  exclusion-tag: "janitorr_keep" # Set this tag to your movies or TV shows in the *arrs to exclude media from being cleaned up

  media-deletion:
    enabled: true
    movie-expiration:
      # Percentage of free disk space to expiration time - if the highest given number is not reached, nothing will be deleted
      # If filesystem access is not given, disk percentage can't be determined. As a result, Janitorr will always choose the largest expiration time.
      5: 15d # 15 days
      10: 30d # 1 month - if a movie's files on your system are older than this, they will be deleted
      15: 30d # 2 months
      20: 90d # 3 months
    season-expiration:
      5: 15d # 15 days
      10: 20d # 20 days - if a season's files on your system are older than this, they will be deleted
      15: 60d # 2 months
      20: 120d # 4 months

  tag-based-deletion:
    enabled: true
    minimum-free-disk-percent: 100
    schedules:
      - tag: 5 - demo
        expiration: 30d
      - tag: 10 - demo
        expiration: 7d

  episode-deletion: # This ignores Jellystat. Only grab history matters. It also doesn't clean up Jellyfin. There is NO seeding check either.
    enabled: true
    tag: janitorr_daily # Shows tagged with this will have all episodes of their LATEST season deleted by the below thresholds
    max-episodes: 10 # maximum (latest) episodes of this season to keep
    max-age: 30d # Maximum age to keep any episode at all - even the last 10 episodes would expire after 30 days in this example

clients:
  sonarr:
    enabled: true
    url: "http://localhost:8989"
    api-key: "c770a6f7e1a74ea99b582cf62e37fc84"
    delete-empty-shows: true # If a show that was "touched" by Janitorr contains no files and has no monitored seasons at all, it will get deleted as part of orphan cleanup
  radarr:
    enabled: true
    url: "http://localhost:7878"
    api-key: "c2b17d521b8845528aa6ddd8c9378925"

  ## You can only choose one out of Jellyfin or Emby.
  ## User login is only needed if deletion is enabled.
  jellyfin:
    enabled: true
    url: "http://localhost:8096"
    api-key: "cf8121c97a77498c80b15a2b71d7cac1"
    username: janitorr
    password: janitorr
    delete: true # Jellyfin setup is required for JellyStat. However, if you don't want Janitorr to send delete requests to the Jellyfin API, disable it here

  ## You can only choose one out of Jellyfin or Emby. Emby support is secondary.
  ## User login is only needed if deletion is enabled.
  emby:
    enabled: false
    url: "http://localhost:8096"
    api-key: "4da8d93992804489ba2d1f0e31b8316c"
    username: Janitorr
    password: janitorr
    delete: true # Emby setup is required for JellyStat. However, if you don't want Janitorr to send delete requests to the Emby API, disable it here
  jellyseerr:
    enabled: true
    url: "http://localhost:5055"
    api-key: "MTcyMjc4MDU2ODQ4MGI4YzI4N2RmLWNiNDAtNDMxOS05NTNjLThlMzQwOWQ1Yjc4Mw=="
    match-server: false # Enable if you have several Radarr/Sonarr instances set up in Jellyseerr. Janitorr will match them by the host+port supplied in their respective config settings.
  jellystat:
    enabled: true
    whole-tv-show: false # Enabling this will make Jellystat consider TV shows as a whole if any episode of any season has been watched
    url: "http://jellystat:3000"
    api-key: "9779f978-1b23-4582-982a-ad6f5d7f7649"
Schaka commented 2 weeks ago

This looks correct. You'll need to correct your mapping and make sure the config file is mapped into the container. Your mapping config looks correct, so I'd recommend making sure the file exists in that exact folder and whatever user you're starting Janitorr as has permission to read it.

Schaka commented 2 weeks ago

Has this been resolved?

Schaka commented 1 week ago

Closing. I don't believe it's an issue (anymore).