-
Notifications
You must be signed in to change notification settings - Fork 0
/
rc.plexmediaserver
210 lines (176 loc) · 6.71 KB
/
rc.plexmediaserver
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/bin/sh
### BEGIN INIT INFO
# Provides: plexmediaserver
# Required-Start: $remote_fs $syslog $networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Plex Media Server
# Description: Plex Media Server for Linux,
# More information at http://www.plexapp.com
# Author: Plex Packaging team
# Version: 1.06
### END INIT INFO
# Set Crash Reporting identification variables
export PLEX_MEDIA_SERVER_INFO_VENDOR="$(grep ^NAME= /etc/os-release | awk -F= '{print $2}' | tr -d \" )"
export PLEX_MEDIA_SERVER_INFO_DEVICE="PC"
export PLEX_MEDIA_SERVER_INFO_MODEL="$(uname -m)"
export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION="$(grep ^VERSION= /etc/os-release | awk -F= '{print $2}' | tr -d \" )"
# Default values prior to ingesting and validating contents of /etc/default/plexmediaserver
PlexUser="plex"
PlexHome="/usr/lib/plexmediaserver"
PlexAppSuppDir="/var/lib/plexmediaserver/Library/Application Support"
PlexTempDir="/tmp"
PlexStackSize=3000
PlexPluginProcs=6
# Read configuration variable file if it is present
[ -r /etc/default/plexmediaserver ] && . /etc/default/plexmediaserver
Running=$(ps -ef | grep 'Plex Media Server'| grep -v grep | wc -l)
case "$1" in
start)
if [ $Running -gt 0 ]; then
echo "Plex is already running."
exit 0
fi
if [ -f /etc/default/locale ]; then
export LANG="$(cat /etc/default/locale | awk -F '=' '/LANG=/{print $2}' | sed 's/"//g')"
export LC_ALL="$LANG"
fi
# Use Read-Writeback approach to handle when variables aren't global.
# Check PLEX_USER
if [ "$PLEX_USER" != "" ]; then
if [ "$(getent passwd "$PLEX_USER")" != "" ]; then
PlexUser="$PLEX_USER"
else
echo "${0}: No such username: \"$PLEX_USER\". Retaining \"$PlexUser\" as default username."
fi
fi
# Check PLEX_MEDIA_SERVER_USER (Supersedes PLEX_USER)
if [ "$PLEX_MEDIA_SERVER_USER" != "" ]; then
if [ "$(getent passwd "$PLEX_MEDIA_SERVER_USER")" != "" ]; then
PlexUser="$PLEX_MEDIA_SERVER_USER"
else
echo "${0}: No such username: \"$PLEX_MEDIA_SERVER_USER\". Retaining \"$PlexUser\" as default username."
fi
fi
# Prevent "UNKNOWN" when in IPA/LDAP environments (revert to default)
if [ "$PlexUser" = "UNKNOWN" ]; then
echo "${0}: Illegal username: 'UNKNOWN'. Retaining \"plex\" as username."
PlexUser="plex"
fi
# PlexUser's HOME directory is the default location. Supersede if specified
PlexAppSuppDir="$(getent passwd "$PlexUser" | awk -F: '{print $6}')/Library/Application Support"
# If user specified AppSuppDir, it must already exist. This overrides the $PlexUser's "$HOME"
if [ "$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR" != "" ]; then
if [ -d "$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR" ]; then
PlexAppSuppDir="$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR"
else
echo "${0}: Given Application Support Directory \"$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR\" does not exist. Ignoring."
fi
fi
# Check TempDir
Candidate=""
if [ "$PLEX_MEDIA_SERVER_TMPDIR" != "" ]; then
Candidate="$PLEX_MEDIA_SERVER_TMPDIR"
# Be generous with TEMP DIR specification
elif [ "$TMPDIR" != "" ]; then
Candidate="$TMPDIR"
elif [ "$TEMP" != "" ]; then
Candidate="$TEMP"
elif [ "$TMP" != "" ] && [ -d "$TMP" ]; then
Candidate="$TMP"
fi
# Validate TempCandidate
if [ "$Candidate" != "" ]; then
if [ -d "$Candidate" ]; then
PlexTempDir="$Candidate"
else
echo "${0}: Temp Directory does not exist: \"$Candidate\". Using default location."
fi
fi
# Plug-in Procs (No checking. PMS handles internally)
if [ "$PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS" != "" ]; then
Candidate="$(echo $PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS | grep -x -E '[[:digit:]]+' )"
if [ "$Candidate" != "" ]; then
PlexPluginProcs="$Candidate"
else
echo "${0}: Non-numeric Max Plug-in Procs given: \"$PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS\". Using default value."
fi
fi
# Stack Size
if [ "$PLEX_MEDIA_SERVER_MAX_STACK_SIZE" != "" ]; then
Candidate="$(echo $PLEX_MEDIA_SERVER_MAX_STACK_SIZE | grep -x -E '[[:digit:]]+' )"
if [ "$Candidate" != "" ]; then
PlexStackSize="$Candidate"
else
echo "${0}: Non-numeric Max Stack Size given: \"$PLEX_MEDIA_SERVER_MAX_STACK_SIZE\". Using default value."
fi
fi
# Verify Plex Media Server is indeed where it says it is
if [ "$PLEX_MEDIA_SERVER_HOME" != "" ]; then
if [ -d "$PLEX_MEDIA_SERVER_HOME" ]; then
PlexHome="$PLEX_MEDIA_SERVER_HOME"
else
echo "${0}: Given application location \"${PLEX_MEDIA_SERVER_HOME}\" does not exist. Using default location."
fi
fi
# Create AppSuppDir if not present and set ownership
if [ ! -d "$PlexAppSuppDir" ]; then
mkdir -p "$PlexAppSuppDir"
if [ $? -eq 0 ]; then
chown "${PlexUser}"."${PlexUser}" "$PlexAppSuppDir"
else
echo "ERROR: Could not create \"$PlexAppSuppDir\". System error code $?"
exit 1
fi
fi
# Build the final runtime environment variables. Specify these parameters in /etc/default/plexmediaserver
export PLEX_MEDIA_SERVER_USER="$PlexUser"
export PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="$PlexPluginProcs"
export PLEX_MEDIA_SERVER_HOME="$PlexHome"
export PLEX_MEDIA_SERVER_MAX_STACK_SIZE="$PlexStackSize"
export PLEX_MEDIA_SERVER_TMPDIR="$PlexTempDir"
export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR="$PlexAppSuppDir"
export LD_LIBRARY_PATH="${PLEX_MEDIA_SERVER_HOME}/lib"
export TMPDIR="${PLEX_MEDIA_SERVER_TMPDIR}"
ulimit -s "$PLEX_MEDIA_SERVER_MAX_STACK_SIZE"
# Add sleep - for those who launch with this script
echo "Starting Plex Media Server."
su -m "$PLEX_MEDIA_SERVER_USER" -s /bin/sh -c "exec ${PLEX_MEDIA_SERVER_HOME}/Plex\ Media\ Server &" >/dev/null 2>&1
sleep 3
;;
stop)
if [ $Running -eq 0 ]; then
echo "Plex Media Server is not running."
exit 0
fi
echo "Shutting down Plex Media Server: "
# Ask nicely
pids="$(ps -ef | grep 'Plex Media Server' | grep -v grep | awk '{print $2}')"
kill -15 $pids
sleep 5
# Stuck
pids="$(ps -ef | grep /usr/lib/plexmediaserver | grep -v grep | awk '{print $2}')"
if [ "$pids" != "" ]; then
kill -9 $pids
sleep 2
fi
;;
restart)
$0 stop
sleep 5
$0 start
;;
status)
if [ $Running -gt 0 ]; then
echo "Plex Media Server is running."
else
echo "Plex Media Server is stopped."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0