Сценарий Fedora 13 init.d, не могу остановиться

Я написал сценарий init.d, который предполагает запуск процесса Java CLI.
Проблема в том, что когда я его прекращаю, я получаю [сбой], и процесс все еще работает.
Спасибо

#!/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

3 ответа

Решение

К сожалению, функция 'daemon' не возвращает действительный $! процесса, который он запустил, чтобы записать его в файл pid. Что вы должны сделать, это обернуть ваш запуск Java в сценарий оболочки и вместо этого запустить его.

#!/bin/sh

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 & 

echo $! /var/run/javaprogram.pid

Затем запустите ваш процесс демона с параметром --pidfile, чтобы предотвратить несколько запусков:

daemon --pidfile=/var/run/javaprogram.pid /path/to/script/javaprogram.sh

... и к вашей остановке () добавьте rm -f /var/run/javaprogram.pid для очистки после себя.

Возможно, вы захотите сохранить pid при запуске в файле.pid в /var/run где-нибудь... затем использовать killproc -p pid name

Это должно убить это

Возможно Жиль прав. Ваша проблема в том, что приложение запускается под Java. и, как это обычно происходит с виртуальными машинами (такими как java, python и т. д.), процесс представляет собой "java что-то" вместо просто "что-то".

В целях отладки сверьтесь с pidof, чтобы увидеть, что возвращается. (проверьте pidof java, чтобы увидеть pids ваших подпроцессов)

то, что вы можете сделать, это использовать ps aux | awk /program/'{print $2}' и убейте эти pids, или найдите файл инициализации, который запускает приложение Java, и посмотрите, как это делается:>

Другие вопросы по тегам