Tidbits on software development, technology, and other geeky stuff.

start-stop-daemon with mono-service2

I wrote a .NET service (i.e. System.ServiceProcess.ServiceBase) and was running it in Arch Linux with the help of mono-service2. I wanted it to behave like another other Linux daemon with start / stop / restart ability so I could start the service at boot easily.

Here is the bash script I finally came up with which I placed in the /etc/rc.d folder and added a DAEMON reference to in the /etc/rc.conf file. If you are using another distribution of Linux, most likely you’ll want to use the chkconfig command to register the service.

#!/bin/sh​
​
daemon_name=MyMonoService​
​
. /etc/rc.conf​
. /etc/rc.d/functions​
​
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin​
DAEMON=/usr/bin/mono/mono-service2​
NAME=MyMonoService​
DESC=MyMonoService​
​
MONOSERVER=$(which mono-service2)MONOSERVER_PID=$(cat /tmp/MyMonoService.lock)​
​
case "$1" in​
 start)​
  stat_busy "Starting MyMonoService"if [ -z "${MONOSERVER_PID}" ]; then${MONOSERVER} -l:/tmp/MyMonoService.lock /opt/MyMonoService/MyMonoService.exe​
   stat_done​
  elseecho "MyMonoService is already running!"​
   stat_fail​
  fi;;​
 stop)​
  stat_busy "Stopping MyMonoService"if [ -n "${MONOSERVER_PID}" ]; thenkill ${MONOSERVER_PID}rm /tmp/MyMonoService.lock​
   stat_done​
  elseecho "MyMonoService is not running"​
   stat_fail​
  fi;;​
 restart)$0 stop​
  sleep 1$0 start​
  stat_done​
 ;;​
 *)echo "usage: $0 {start|stop|restart}"esac​
​
exit 0