Сценарий 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, и посмотрите, как это делается:>