Correct way of running UMS as daemon?
Forum rules
Please make sure you follow the Problem Reporting Guidelines before posting if you want a reply
Please make sure you follow the Problem Reporting Guidelines before posting if you want a reply
Correct way of running UMS as daemon?
Hi there,
I am running UMS as daemon using screen.
It works, but i bet that's not the correct way to do this. Do you have any suggestion for a nice systemd integration?
I am running UMS as daemon using screen.
Code: Select all
sudo -u ums screen -d -m -S UMS /opt/ums/UMS.sh
Re: Correct way of running UMS as daemon?
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
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
Re: Correct way of running UMS as daemon?
Thank you, I'll give it a try