Re: Inicializar programa como serviço
Citação:
Postado originalmente por
tifoski
...desculpe, utilizarei da próxima...
Sem crise Lucas :)
Citação:
Postado originalmente por
tifoski
Há alguma forma de colocar este serviço no ar, sem o nohup neste script?
Abaixo disponho código que testei no Ubuntu. No meu teste, usei Python, em vez de Java, e o payload foi um builtin, sem o parâmetro -jar. Readaptei para seu aplicativo, após ajustes, e publico o script para que faça os devidos testes :)
Tirei o "touch", por ser redundante (afinal você já tinha uma saída ">"), e fiz ajustes num grep, que estava dando erro de "invalid max count". Também melhorei o retorno de status, adicionando o número do processo.
Código :
### BEGIN INIT INFO
# Provides: TRANSX
# Required-Start: $syslog $remote_fs
# Required-Stop: $syslog
# Default-Start: 3 5
# Default-Stop:
# Description: Servico TRANSX
### END INIT INFO
SERV=transx
APPPATH="/transx/recargametro"
JAVA_BIN="/root/jdk1.7.0_25/bin/java"
PAYLOAD="transx-1.0.103.jar"
PIDFILE="/var/run/$SERV.pid"
start() {
echo -n "Starting $SERV: "
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
echo $SERV already running $PID.
exit 2;
else
cd $APPPATH
$JAVA_BIN -jar $PAYLOAD &> /dev/null &
RETVAL=$?
[ $RETVAL -eq 0 ] && echo `ps aux | grep -- "$PAYLOAD" | grep -v grep | awk {'print $2'}` > $PIDFILE
echo OK
return $RETVAL
fi
}
stop() {
echo -n "Stopping $SERV: "
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
kill $PID && rm -f $PIDFILE
echo OK
return 0
else
echo "not running or pid file is gone."
fi
}
status() {
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
echo "running at PID" $PID.
return 0
else
echo "not running"
return 1
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage: {start|stop|restart}"
exit 1
;;
esac
exit $?
Faça o teste, e mantenha-nos informado :)
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
trober
Sem crise Lucas :)
Abaixo disponho código que testei no Ubuntu. No meu teste, usei Python, em vez de Java, e o payload foi um
builtin, sem o parâmetro -jar. Readaptei para seu aplicativo, após ajustes, e publico o script para que faça os devidos testes :)
Tirei o "touch", por ser redundante (afinal você já tinha uma saída ">"), e fiz ajustes num grep, que estava dando erro de "
invalid max count". Também melhorei o retorno de
status, adicionando o número do processo.
Código :
### BEGIN INIT INFO
# Provides: TRANSX
# Required-Start: $syslog $remote_fs
# Required-Stop: $syslog
# Default-Start: 3 5
# Default-Stop:
# Description: Servico TRANSX
### END INIT INFO
SERV=transx
APPPATH="/transx/recargametro"
JAVA_BIN="/root/jdk1.7.0_25/bin/java"
PAYLOAD="transx-1.0.103.jar"
PIDFILE="/var/run/$SERV.pid"
start() {
echo -n "Starting $SERV: "
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
echo $SERV already running $PID.
exit 2;
else
cd $APPPATH
$JAVA_BIN -jar $PAYLOAD &> /dev/null &
RETVAL=$?
[ $RETVAL -eq 0 ] && echo `ps aux | grep -- "$PAYLOAD" | grep -v grep | awk {'print $2'}` > $PIDFILE
echo OK
return $RETVAL
fi
}
stop() {
echo -n "Stopping $SERV: "
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
kill $PID && rm -f $PIDFILE
echo OK
return 0
else
echo "not running or pid file is gone."
fi
}
status() {
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
echo "running at PID" $PID.
return 0
else
echo "not running"
return 1
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "Usage: {start|stop|restart}"
exit 1
;;
esac
exit $?
Faça o teste, e mantenha-nos informado :)
Com estes ajustes o Stop não está funcionando e o PID não aparece, apenas aparece a palavra PID, mas não o número do processo. Quando dou um cat /var/run/transx.pid, ele retorna em branco :/ sabe o que pode ser?
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
tifoski
Com estes ajustes o Stop não está funcionando e o PID não aparece, apenas aparece a palavra PID, mas não o número do processo. Quando dou um cat /var/run/transx.pid, ele retorna em branco :/ sabe o que pode ser?
Roda "na mão" o comando abaixo, substituindo seu $PAYLOAD, e diga o que aparece. Mantenha as aspas duplas (double quotes).
Código :
ps aux | grep -- "$PAYLOAD" | grep -v grep | awk {'print $2'}
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
trober
Roda "na mão" o comando abaixo, substituindo seu $PAYLOAD, e diga o que aparece. Mantenha as aspas duplas (double quotes).
Código :
ps aux | grep -- "$PAYLOAD" | grep -v grep | awk {'print $2'}
Olha,
Deixei da seguinte forma e funcionou:
Código :
ps aux | grep $PAYLOAD | grep -v grep | awk {'print $2'}
[/QUOTE]
O unico problema agora é o Stop, está acontecendo da seguinte forma. Eu dou o comando /etc/init.d/transx stop e ele me retorna a seguinte mensagem:
Código :
Stopping transx: /etc/init.d/transx: Line 38: kill: 2909 (PID):Invalid signal specification OK
[QUOTE]
Após isso, vou no script, altero o kill para kill -l, ele retorna a mensagem, quando retorno para kill apenas, ele começa a dar o stop normalmente, mas se reinicio o server, volta a dar a mesma mensagem.
Atenciosamente,
Lucas Farias
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
tifoski
...altero o kill para kill -l, ele retorna a mensagem, quando retorno para kill apenas, ele começa a dar o stop normalmente, mas se reinicio o server, volta a dar a mesma mensagem.
Lucas, experimenta "kill -9".