Я написал сценарий 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, чтобы убрать за собой.