Linux systems make excellent media servers. Since Plex Media Server has been unofficially available on the Raspberry Pi 2, Banana Pi and other ARMv7 devices, some users have wanted to monitor the service and restart it automatically.
Monit is the perfect service for that as it has advanced probing for system services. At the basic level it monitors for the existence of process id files which daemons user to show a process is running. Monit does also let you probe ports and urls giving additional layers of stability checking. For example, the Plex Media Server pid could exist but the Plex service is frozen. By probing the port and URL we can restart Plex on the Raspberry Pi 2 if the Plex web interface is unavailable.
This monitor plex media service failure and restart automatically tutorial was tested on Ubuntu and Debian systems and is based on the official documentation. This guide will work on Plex for x64 and x86 systems too. Make sure you have Monit installed.
If you are trying to figure out which hardware would work best for you, consider reading the Pi benchmarks.
Pi Unit | ||||||||
---|---|---|---|---|---|---|---|---|
Raspberry Pi 3 | Quad Core | |||||||
Raspberry Pi 2 | Quad Core | |||||||
Raspberry Pi | Single Core | |||||||
Banana Pi | Dual Core | |||||||
Banana Pi Pro | Dual Core |
Monitor and Autorestart Plex Media Server Service Failure
Figure out which ports to monitor using netstat first.
Make sure Plex is running on your device and execute this netstat command to get all listening ports on your system and filter the Plex ones.
netstat -lntp | grep -i plex
Plex Media Server runs on more than just 32400 so we will use Monit to monitor these ports
tcp 0 0 0.0.0.0:32400 0.0.0.0:* LISTEN 15053/Plex Media Se
tcp 0 0 0.0.0.0:32401 0.0.0.0:* LISTEN 15053/Plex Media Se
tcp 0 0 0.0.0.0:32469 0.0.0.0:* LISTEN 15096/Plex DLNA Ser
tcp 0 0 0.0.0.0:1909 0.0.0.0:* LISTEN 15096/Plex DLNA Ser
tcp 0 0 0.0.0.0:39293 0.0.0.0:* LISTEN 15061/Plex Plug-in
Now open a browser and go to your local ip: https://ip.address:2812 and enter your credentials. Then go back to the SSH terminal.
Create the Plex media server on ARM monit configuration
sudo nano /etc/monit/conf.d/plex
Paste the code below, note that most of these are optional but at a minimum you will want the first 4 lines.
Here is what the Plex monit configuration does
- Monitors the existence of the plexmediaserver.pid file, if it is no longer present plex will be restarted
- Tests if 32400, 32401, 32469 and 1909 port is open on the loopback address 5 times and if Plex isn't running, Monit restarts the Plex service automatically
- Tests if the default Plex management web interface is available
check process plexmediaserver with pidfile "/var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/plexmediaserver.pid"
start program = "/usr/sbin/service plexmediaserver start" with timeout 60 seconds
stop program = "/usr/sbin/service plexmediaserver stop"
if failed host 127.0.0.1 port 32400 with timeout 30 seconds for 5 cycles then restart
if failed port 32401 with timeout 30 seconds for 5 cycles then restart
if failed port 32469 with timeout 30 seconds for 5 cycles then restart
if failed port 1909 with timeout 30 seconds for 5 cycles then restart
if failed url http://127.0.0.1:32400/web/index.html with timeout 30 seconds for 5 cycles then restart
If you have issues with the monit configuration try changing these lines to specifically use the init.d script if you are on Debian or Ubuntu.
start program = "/etc/init.d/plexmediaserver start" with timeout 60 seconds
stop program = "/etc/init.d/plexmediaserver stop"
If you find Plex is restarting when you don't want it to then increase the timeout in the failed port lines
if failed host 127.0.0.1 port 32400 with timeout 60 seconds for 5 cycles then restart
if failed port 32401 with timeout 60 seconds for 5 cycles then restart
if failed port 32469 with timeout 60 seconds for 5 cycles then restart
if failed port 1909 with timeout 60 seconds for 5 cycles then restart
if failed url http://127.0.0.1:32400/web/index.html with timeout 60 seconds for 5 cycles then restart
You can also check the web interface and remove any ports that are causing trouble.
A simplified Plex Monit configuration would be something like this
check process plexmediaserver with pidfile "/var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/plexmediaserver.pid"
start program = "/usr/sbin/service plexmediaserver start" with timeout 60 seconds
stop program = "/usr/sbin/service plexmediaserver stop"
if failed url http://127.0.0.1:32400/web/index.html with timeout 30 seconds for 5 cycles then restart
Check the Monit configuration has valid syntax
sudo monit -t
Should see the message below, you may also see nothing which means the syntax is ok
Control file syntax OK
Then reload Monit to activate the configuration
sudo service monit reload
Go back to the monit web interface at https://ip.address:2812
You will now see a plexmediaserver process
Back in SSH kill the Plex process like this (thanks to Stackoverflow) assuming your Plex server runs as the plex user.
sudo pkill -u plex
Then back in the Monit web interface you will see a screen like this, wait a minute and it should pop back up as running
For those of you using reverse proxies, it is easy to add Monit to nginx or Apache.
Now your Plex Media Server service will auto restart on failure on your home server running Ubuntu, Debian or other Linux system on your x86, x64, Raspberry Pi 2, Banana Pi or Orange Pi.