Meu requisito é poder iniciar / parar um aplicativo java específico (nGrinder) como um serviço. Seguindo este link , escrevi um arquivo para o init.d da seguinte forma:
#!/bin/sh
#
# /etc/init.d/ngrinder_controller
# Subsystem file for "ngrinder_controller" server
#
# Below line defines the run levels it will run on, start prio, kill prio
# chkconfig: 2345 95 05
# description: ngrinder_controller server daemon
#
# processname: ngrinder_controller
# pidfile: /var/run/ngrinder_controller.pid
# source function library
#. /etc/rc.d/init.d/functions
# pull in sysconfig settings
#[ -f /etc/sysconfig/mySystem ] && . /etc/sysconfig/mySystem
RETVAL=0
prog="ngrinder_controller"
exe="java -XX:MaxPermSize=200m -jar /root/ngrinder-controller-3.3.war"
start() {
echo "Starting $prog:"
nohup ${exe} >/dev/null 2>&1 &
RETVAL=$?
PID=$!
#[ "$RETVAL" = 0 ] && touch /var/lock/subsys/$prog #Change 1
echo
}
stop() {
echo -n $"Stopping $prog:"
killproc $prog -TERM
#kill -15 $PID
RETVAL=$?
[ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/$prog
echo
}
reload() {
echo -n $"Reloading $prog:"
killproc $prog -HUP
RETVAL=$?
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
reload
;;
condrestart)
if [ -f /var/lock/subsys/$prog ] ; then
stop
# avoid race
sleep 3
start
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
Agora, enquanto a função start funciona, a parada não. E diz que o comando killproc não foi encontrado. Além disso, como o arquivo obtém o PID do aplicativo? E em terceiro lugar, quando eu não comento a linha [ "$RETVAL" = 0 ] && touch /var/lock/subsys/$prog
, recebo um erro porque eu não tenho nem mesmo uma pasta subsys bloqueada. Estou correndo no Ubuntu 14.04. Alguma idéia?