【问题标题】:Can't make program run as daemon不能让程序作为守护进程运行
【发布时间】:2014-04-12 16:46:42
【问题描述】:

我正在尝试编写 init.d 脚本来运行 solr 作为守护进程,但不幸的是ps aux 显示没有这样的进程。

代码如下:

#!/bin/sh

start_path=/opt/solr/example/start.jar
JAVA_PATH=/usr/bin/java
PID=/tmp/.solr/pid
ARGS="-jar $start_path"

if [ ! -d /tmp/.solr ]
    then
        mkdir /tmp/.solr
fi

start(){
    echo -n "Starting solr..."
    start-stop-daemon --start --background --name "solr" --make-pidfile --pidfile $PID --exec ${JAVA_PATH} -- ${ARGS} 
    RETVAL="$?"
    if [ "$RETVAL" = 0 ] 
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi  
    return $RETVAL
}

case "$1" in
    start)
        start
    ;;  
    *)  
        echo $"Usage: solr {start}"
        exit 3
    ;;  
esac

exit $RETVAL

【问题讨论】:

    标签: bash solr daemon init.d


    【解决方案1】:

    使用命令怎么样

    java jar start.jar & disown
    

    这将启动进程并将其移至后台...

    希望我能帮上忙!

    【讨论】:

    • 不错,但我想更好地控制这个过程。我也想停止它,重新启动它,获取状态。 init.d 脚本似乎更合适。
    【解决方案2】:

    嗯,感谢this 的博文,我终于成功了。 下面是它的外观:

    #!/bin/sh
    
    PIDFILE=/tmp/.solr/pid
    
    if [ ! -d /tmp/.solr ]
        then
            mkdir /tmp/.solr
    fi
    
    cd /opt/solr/example
    
    start(){
        if [ ! -f $PIDFILE ]
            then
                echo "Starting solr..."
                nohup java -jar start.jar &
                echo $! > $PIDFILE
                RETVAL=$?
                if [ "$RETVAL" = 0 ]
                    then
                        echo "Done."
                    else
                        echo "Failed. See error code for more information."
                fi
                return $RETVAL
                echo $! > $PIDFILE
            else
                echo "Solr is already running"
                return 1
        fi
    }
    
    stop(){
        if [ ! -f $PIDFILE ]
            then
                echo "Solr is not running"
                return 1
            else
                PID=$(cat $PIDFILE)
                echo "Stopping solr..."
                kill $PID
                RETVAL=$?
                if [ "$RETVAL" = 0 ]
                    then
                        echo "Solr stopped."
                        rm $PIDFILE
                    else
                        echo "Can't stop Solr."
                fi
                return $RETVAL
        fi
    }
    
    restart(){
        stop
        start
    }
    
    case "$1" in
        start)
            start
        ;;
        stop)
            stop
        ;;
        restart)
            restart
        ;;
        *)
            echo $"Usage: solr {start|stop|restart}"
            exit 3
        ;;
    esac
    
    exit $RETVAL
    

    【讨论】:

      最近更新 更多