LINUX DOTNET      Linux DotNET 中文社区

Linux .NET编程与应用技术之专业网站:www.linuxdot.net !     返回首页    
   
[楼主] 如何在ubuntu上使用start-stop-daemon启动mono

我遇到一个使用start-stop-daemon在后台运行mono的问题。这个脚本把java程序运行到后台没有任何问题。运行mono的时候,没有报任何错误直接启动不了。 用mono指令执行.net程序时还经常出现僵尸mono进程。java虚拟机则没有出现过。

如果有空的时候,帮忙解答一下。非常感谢。

多此测试之后发现,无法启动是由于--background参数,当移出background参数,手动执行改脚本就能够启动mono。

Test.exe is a console application, it can run use mono command directly. I use command line apt-get install mono-complete to install mono on ubuntu 14.04.

启动脚本如下

#!/bin/sh
#
# init.d script.
#
### END INIT INFO

DAEMON=/usr/bin/mono
OPTION= 
VAR=/usr/local/Test/Test.exe
DESC=Test.Service

# Default defaults.  Can be overridden by the /etc/default/$NAME
NAME=Test.Service
PIDFILE=/var/data/pid/$NAME.pid
RUNAS=root


if test ! -x $DAEMON; then
    echo "Could not find $DAEMON"
    exit 0
fi


. /lib/lsb/init-functions

STARTTIME=1
DIETIME=10                   # Time to wait for the server to die, in seconds
                            # If this value is set too low you might not
                            # let some servers to die gracefully and
                            # 'restart' will not work


running_pid() {
# Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
    # Is this the expected server
    [ "$cmd" != "$name" ] &&  return 1
    return 0
}

running() {
# Check if the process is running looking at /proc
# (works for all users)

    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    pid=`cat $PIDFILE`
    running_pid $pid $DAEMON || return 1
    return 0
}

start_server() {
# Start the process using the wrapper
            start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                        --make-pidfile --chuid $RUNAS \
                        --exec $DAEMON -- $VAR
            errcode=$?
 return $errcode
}

stop_server() {
# Stop the process using the wrapper
            start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                        --user $RUNAS \
                        --exec $DAEMON
            errcode=$?
 return $errcode
}

force_stop() {
# Force the process to die killing it manually
 [ ! -e "$PIDFILE" ] && return
 if running ; then
  kill -15 $pid
 # Is it really dead?
  sleep "$DIETIME"s
  if running ; then
   kill -9 $pid
   sleep "$DIETIME"s
   if running ; then
    echo "Cannot kill $NAME (pid=$pid)!"
    exit 1
   fi
  fi
 fi
 rm -f $PIDFILE
}


case "$1" in
  start)
 log_daemon_msg "Starting $DESC" "$NAME"
        # Check if it's running first
        if running ;  then
            log_progress_msg "apparently already running"
            log_end_msg 0
            exit 0
        fi
        if start_server ; then
            # NOTE: Some servers might die some time after they start,
            # this code will detect this issue if STARTTIME is set
            # to a reasonable value
            [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time
            if  running ;  then
                # It's ok, the server started and is running
                log_end_msg 0
            else
                # It is not running after we did start
                log_end_msg 1
            fi
        else
            # Either we could not start it
            log_end_msg 1
        fi
 ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if running ; then
            # Only stop the server if we see it running
   errcode=0
            stop_server || errcode=$?
            log_end_msg $errcode
        else
            # If it's not running don't do anything
            log_progress_msg "apparently not running"
            log_end_msg 0
            exit 0
        fi
        ;;
  force-stop)
        # First try to stop gracefully the program
        $0 stop
        if running; then
            # If it's still running try to kill it more forcefully
            log_daemon_msg "Stopping (force) $DESC" "$NAME"
   errcode=0
            force_stop || errcode=$?
            log_end_msg $errcode
        fi
 ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
  errcode=0
        stop_server || errcode=$?
        # Wait some sensible amount, some server need this
        [ -n "$DIETIME" ] && sleep $DIETIME
        start_server || errcode=$?
        [ -n "$STARTTIME" ] && sleep $STARTTIME
        running || errcode=$?
        log_end_msg $errcode
 ;;
  status)

        log_daemon_msg "Checking status of $DESC" "$NAME"
        if running ;  then
            log_progress_msg "running"
            log_end_msg 0
        else
            log_progress_msg "apparently not running"
            log_end_msg 1
            exit 1
        fi
        ;;
  *)
 N=/etc/init.d/$NAME
 echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
 exit 1
 ;;
esac

exit 0

作者:tr0217   发布时间:16年05月04日   可选操作:删除 回复

 
   
   

留言回复:
标题: * 标题必填
作者:   * 请填上你的名字  
操作键:   * 填入几个字母表示是您写的,便于进一步操作
发言内容:
 
发贴者须知:
1、您无需注册即可发贴,但是,贴子内容必须在法律法规和社会公德所允许的范围内;
2、本站专注IT技术,谢绝包括政治、社会、情感等任何与IT技术无关的贴子在本站发表;
3、本站保留对任何贴子进行删除、禁用、更改、举报、追究等所有权利;
 
今天是: 星期一  星期天  星期二  星期三  星期四  星期五  星期六