fedora 13 init.d脚本,不能停止

问题描述:

我写了init.d脚本,假设运行java CLI proccess。
问题是,当我停止它,我得到[失败],并且进程仍在运行。
感谢fedora 13 init.d脚本,不能停止

#!/usr/bin/env bash 
# 
# chkconfig: 345 97 03 
# 
# processname: quotes-srv 
# 
# 
# source function library 

. /etc/rc.d/init.d/functions 

NAME=quotes-srv 

start() { 
    echo -n $"Starting $NAME: " 
    daemon +19 java -Dlog4j.configuration="file:/opt/quotes/properties/log4j/log4j.properties" -Dproperties_folder="/opt/quotes/properties/app/" -jar /opt/quotes/trade-0.0.1-SNAPSHOT-jar-with-dependencies.jar & 
touch /var/lock/subsys/$NAME 
} 

stop() { 
    echo -n $"Stopping $NAME: " 
    killproc $NAME 
    echo 
    rm -f /var/lock/subsys/$NAME 
} 

restart() { 
    stop 
    start 
} 

case "$1" in 
    start) 
    start 
    ;; 
    stop) 
    stop 
    ;; 
    restart|force-reload|reload) 
    restart 
    ;; 
    condrestart|try-restart) 
    [ -f /var/lock/subsys/$NAME ] && restart 
    ;; 
    status) 
    status $NAME 

    ;; 
    *) 
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" 
    exit 1 
esac 

exit 0 
+0

你可能会有更好的运气在http://www.serverfault.com/ – mjschultz 2010-08-19 20:55:42

killproc将终止在进程列表中的程序相匹配的名称$ NAME

严格地说,这是你的情况的Java

如果这是唯一的java程序,你可以去把java在$ NAME

如果您运行的其他Java服务,你必须找到另一种方式来阻止你的java程序,例如把PID放在/ var/lock/subsys/$ NAME文件中,然后用pid杀死进程。

至少在Debian中有一个很好的工具可以帮助这个,但我不确定它是否存在为 redhat。

+0

谢谢,但是, 问题是,如果我想获得PID,我得到RETVAl变量中的空字符串。 守护进程java ... RETVAL = $? – fatnjazzy 2010-08-19 21:21:49

+0

我正在查找工具:daemontools。显然它是为Fedora开发的:http://directory.fedoraproject.org/wiki/Howto:Daemontools。你必须玩这个选项。我一直在使用这个为各种各样的Java服务器,这工作真的很好。 – 2010-08-19 21:35:09