4 Installing Multiple Instances of Radarr on Windows
reloxx13 edited this page 4 years ago
This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Introduction

This guide will show you how to run multiple instances of Radarr on Windows using only one base installation. This guide was put together using Windows 10; if you are using a previous version of Windows (7, 8, etc.) you may need to adjust some things. This guide also assumes that you have installed Radarr to the default directory, and your second instance of Radarr will be called Radarr-4K. Feel free to change things to fit your own installations, though.

Prerequisites

  • You must have Radarr already installed. It is highly recommended that you use the latest installer.exe file.
  • You must have NSSM (Non-Sucking Service Manager) installed. To install, download the latest release (2.24 at the time of writing) and copy either the 32-bit or 64-bit nssm.exe file to C:/windows/system32. (If you aren't sure if you have a 32-bit or 64-bit system, check Settings > System > About > System type.)

Configuring Radarr

  1. Open a Command Prompt administrator window. (To run as an admin, right click on the Command Prompt icon and choose "Run as administrator.")

  2. If Radarr is running, stop the service by running nssm stop Radarr in Command Prompt.

  3. Now we have to edit the existing Radarr instance to explicitly point to its data directory. The default command is as follows:

    sc config Radarr binpath= "C:\ProgramData\Radarr\bin\Radarr.exe -data=C:\ProgramData\Radarr"

This command tells the original instance of Radarr to explicitly use C:\ProgramData\Radarr for its data directory. If you didn't use the default Radarr install, or if your data folder is somewhere else, you may have to change your paths here.

Creating Radarr-4K

  1. Create a new folder where you'd like Radarr-4K to live. I prefer all my instances in the same place, so my new folder is C:\ProgramData\Radarr-4K.
  2. Back in Command Prompt, create the new Radarr-4K service using nssm install Radarr-4K. A popup window will open where you can type your parameters for the new instance. For this example, we will use the following:
    • Path: C:\ProgramData\Radarr\bin\Radarr.exe
    • Startup directory: C:\ProgramData\Radarr\bin
    • Arguments: -data=C:\ProgramData\Radarr-4K

Note that Arguments points to the new folder created in step 4. This is crucial, as it keeps all the data files from both instances in separate locations.

  1. Click Install service. The window should close and the service will now be available to run.

Configuring Radarr-4K

  1. Next we'll need to configure the new service to use its own port, the entry for which is in a config.xml file. This file is created when you first run the service, so start up Radarr-4K with nssm start Radarr-4K in Command Prompt.

  2. Navigate to your new data directory (C:\ProgramData\Radarr-4K in this case) to see if the config.xml file is there. If it is, go ahead and stop Radarr-4K with nssm stop Radarr-4K. (Don't worry, we'll be starting it back up in a second.)

  3. Open the config.xml file using your preferred text editor. There should only be a handful of lines, but the important one is <Port>7878</Port>.

Since the first Radarr instance will occupy port 7878, the second instance must use another available port, like 7879 or 17878. I prefer the latter, so I changed the line to <Port>17878</Port>. Don't change anything else.

  1. After you've set a new port, save the file and close your text editor.
  2. With both services fully installed and properly configured, you can now start them:

Notes

  • Though this tutorial was tested using Command Prompt, it should work with Windows Terminal as well. But, if you're feeling cautious, just go with Command Prompt.
  • A previous version of this installation guide encouraged users to copy Radarr's config.xml file to Radarr-4K's data directory. However, you'll run into trouble with this method, especially if you have authentication enabled. I'd recommend starting with a clean config.xml file, created when you start the service for the first time (Step 7).
  • If one Radarr instance is updated, both instances will shutdown and only the updated one will start again. To fix this, you will have to manually start the other instance, or you may want to look into using the below powershell script to address the problem until an official solution is found.

Port Checker and Restarter PowerShell Script

When you use two Radarr instances and one of it is updating, it will kill both instances ( by killing all running radarr.console.exe ). Only the one which is updating will come back online.

To keep both online i made a powershell script which i run as a scheduled task.

It checks the ports and if one is not online, it will (re-)start the scheduled task to launch radarr.

Create a new File and name it RadarrInstancesChecker.ps1 with the below code.

Create a scheduled task which triggers on launch and set it to repeat every 5 or 10mins.

  • Trigger:
    • On launch
      • Repeat every 5 or 10 mins
  • Action:
    • Launch Application/Programm
      • Enter powershell as programm
      • Add your script as argument: -File D:\RadarrInstancesChecker.ps1

Adjust ur pathes, ip, ports and scheduled task names.

RadarrInstancesChecker.ps1

################################################################################################
### RadarrInstancesChecker.ps1                                                               ###
################################################################################################
### Keeps multiple Radarr Instances up by checking the port                                  ###
### Please use Radarr´s Discord or Reddit for support!                                       ###
### https://github.com/Radarr/Radarr/wiki/Installing-Multiple-Instances-of-Radarr-on-Windows ###
################################################################################################
### Version: 1.1                                                                             ###
### Updated: 2020-10-22                                                                      ###
### Author:  reloxx13                                                                        ###
################################################################################################



### SET YOUR CONFIGURATION HERE ###
# Set your host ip and port correctly and use your service or scheduledtask names!

# (string) The type how Radarr is starting
# "Service" (default) Service process is used
# "ScheduledTask" Task Scheduler is used
$startType = "Service"

# (bool) Writes the log to C:\Users\YOURUSERNAME\log.txt when enabled
# $false (default)
# $true
$logToFile = $false


$instances = @(
    [pscustomobject]@{   # Instance 1
        Name='Radarr-V3';    # (string) Service or Task name (default: Radarr-V3)
        IP='192.168.178.12'; # (string) Server IP where Radarr runs (default: 192.168.178.12)
        Port='7873';         # (string) Server Port where Radarr runs (default: 7873)
    }
    [pscustomobject]@{   # Instance 2
        Name='Radarr-4K';    # (string) Service or Task name (default: Radarr-V3)
        IP='192.168.178.12'; # (string) Server IP where Radarr runs (default: 192.168.178.12)
        Port='7874';         # (string) Server Port where Radarr runs (default: 7874)
    }
    # If needed you can add more instances here...
    # [pscustomobject]@{   # Instance 3
        # Name='Radarr-3D';    # (string) Service or Task name (default: Radarr-3D)
        # IP='192.168.178.12'; # (string) Server IP where Radarr runs (default: 192.168.178.12)
        # Port='7875';         # (string) Server Port where Radarr runs (default: 7875)
    # }
)


### DONT CHANGE ANYTHING BELOW THIS LINE ###


###
# This function will write to a log file or in console output
###
function Write-Log {
    #Will write to C:\Users\YOURUSERNAME\log.txt
	
    Param(
        $Message,
        $Path = "$env:USERPROFILE\log.txt" 
    )

    function TS {Get-Date -Format 'hh:mm:ss'}
	
	#Console output
	Write-Output "[$(TS)]$Message"
	
	#File Output
    if($logToFile){
        "[$(TS)]$Message" | Tee-Object -FilePath $Path -Append | Write-Verbose
    }
}


Write-Log "START ====================="


$instances | ForEach-Object {
    Write-Log "Check $($_.Name) $($_.IP):$($_.Port)"
    
    $PortOpen = ( Test-NetConnection $_.IP -Port $_.Port -WarningAction SilentlyContinue ).TcpTestSucceeded 
    
    if (!$PortOpen) {
        Write-Log "Port $($_.Port) is closed, restart $($startType) $($_.Name)!"

        if($startType -eq "Service"){
            Get-Service -Name $_.Name | Stop-Service
            Get-Service -Name $_.Name | Start-Service
        }
        elseif($startType -eq "ScheduledTask"){
            Get-ScheduledTask -TaskName $_.Name | Stop-ScheduledTask
            Get-ScheduledTask -TaskName $_.Name | Start-ScheduledTask
        }
        else{
            Write-Log "[ERROR] STARTTYPE UNKNOWN! USE Service or ScheduledTask !"
        }
    }else{
        Write-Log "Port $($_.Port) is open!"
    }
}

Write-Log "END ====================="