Назад | Перейти на главную страницу

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

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

Это должно убить его

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

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

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

К сожалению, функция '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

... и в свой stop () добавьте rm -f /var/run/javaprogram.pid, чтобы убрать за собой.