Correct way of running UMS as daemon?

For help and support with Universal Media Server
Forum rules
Please make sure you follow the Problem Reporting Guidelines before posting if you want a reply
Post Reply
bodom
Posts: 24
Joined: Wed Nov 29, 2017 9:18 am

Correct way of running UMS as daemon?

Post by bodom »

Hi there,

I am running UMS as daemon using screen.

Code: Select all

sudo -u ums screen -d -m -S UMS /opt/ums/UMS.sh
It works, but i bet that's not the correct way to do this. Do you have any suggestion for a nice systemd integration?
boss
Posts: 365
Joined: Thu Jun 30, 2016 1:07 pm

Re: Correct way of running UMS as daemon?

Post by boss »

I guess you are running Linux.
I use a startup script which is the correct way to go I believe.

I don't use system but I believe the commands might be:
systemctl enable ums@username
systemctl start ums@username
AND THEN TO STOP UMS
systemctl stop ums@username

Alternatively you could see if a bash script works.
This is mine which you could modify (depending on file locations) and I use openrc:

#!/bin/bash
#
### BEGIN INIT INFO
# Provides: ums
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts UMS program.
# Description: Java Upnp Media Server dedicated to PS3
### END INIT INFO

#set -x

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Universal Media Server"
NAME=ums
UMS_PROFILE=/root/.config/UMS/UMS.conf
DAEMON=/opt/ums/UMS.sh
DAEMON_OPTS="console"
LOGFILE=/var/log/UMS/root/debug.log
SCRIPTNAME=/etc/init.d/ums
UMS_START=1 # Wether to start or not UMS ver at boot time.
DODTIME=30 # Time to wait for the server to die, in seconds.
# If this value is set too low you might not
# let the program to die gracefully and 'restart' will not work

test -x $DAEMON || exit 1

# Include ums defaults if available
if [ -f "/etc/default/$NAME" ] ; then
. /etc/default/$NAME
fi

# May we run the init.d script ?
[ $UMS_START = 1 ] || exit 1

#--------------------------------------------------------------------------
# Some color codes
txtred=$'\e[0;31m' # Red
txtylw=$'\e[0;33m' # Yellow
txtrst=$'\e[0m' # Text Reset
#--------------------------------------------------------------------------
warnout(){
echo >&2 -e ""$txtylw"Warning:$txtrst $1"
}
#--------------------------------------------------------------------------
running(){
pid=`pgrep -f 'java .*ums.jar.*'`
}
#--------------------------------------------------------------------------
do_start(){
running && { warnout "$NAME is already running !"; exit 0; }
echo "Starting $DESC : $NAME"
UMS_PROFILE="$UMS_PROFILE" start-stop-daemon --start --quiet --background --oknodo \
--exec $DAEMON -- $DAEMON_OPTS

}
#--------------------------------------------------------------------------
do_stop(){
running || { warnout "$DESC is NOT running !"; exit 0; }
local countdown="$DODTIME"
echo -e "Stopping $DESC : $NAME \c "
kill -9 $pid
while running; do
if (($countdown >= 0)); then
sleep 1; echo -n .;
((--countdown))
else
break;
fi
done
echo
# If still running, then try to send SIGINT signal
running && { \
echo >&2 "Using kill -s SIGINT instead"; \
echo >&2 "If you see this message again, then you should increase the value of DODTIME in '$0'."; \
kill -2 $pid; \
}

if [ -e "$LOGFILE" ]; then
count=7
while [ $count -ge 1 ]
do
if [ -e "$LOGFILE.$count" ]; then
plus=$((count+1))
mv "$LOGFILE.$count" "$LOGFILE.$plus"
fi
count=$((count-1))
done
if [ -e "$LOGFILE" ]; then
mv "$LOGFILE" "$LOGFILE.1"
fi
fi

return 0
}
#--------------------------------------------------------------------------
do_force-stop(){
running || { warnout "$NAME is NOT running !"; exit 0; }
echo "Stopping $DESC : $NAME"
kill -9 $pid
if [ -e "$LOGFILE" ]; then
count=8
while [ $count -ge 1 ]
do
if [ -e "$LOGFILE.$count" ]; then
plus=$((count+1))
mv "$LOGFILE.$count" "$LOGFILE.$plus"
fi
count=$((count-1))
done
if [ -e "$LOGFILE" ]; then
mv "$LOGFILE" "$LOGFILE.1"
fi
fi
}
#--------------------------------------------------------------------------
do_status(){
echo -n " * $DESC : $NAME is "
( running || { echo "NOT running "; exit 0; } )
( running && { echo "running (PID -> $(echo $pid))"; exit 0; } )
}
#--------------------------------------------------------------------------
case "$1" in

start|stop|force-stop|status)
do_${1}
;;
restart|reload)
do_stop
do_start
;;
force-restart|force-reload)
do_force-stop
do_start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|force-stop|restart|force-restart|reload|force-reload|status}"
exit 1
;;
esac
bodom
Posts: 24
Joined: Wed Nov 29, 2017 9:18 am

Re: Correct way of running UMS as daemon?

Post by bodom »

Thank you, I'll give it a try
Post Reply