Inicializar programa como serviço
Bom dia pessoal,
Estou precisando iniciar um programa no SUSE como daemon. Eu consegui fazer com que o programa suba na inicialização do SUSE colocando os comandos no /etc/init.d/boot.local, porém, preciso que seja como daemon, para que possa utilizar o start, stop, restart e etc. Da forma que coloquei, não consigo, ele apenas sobe e da o PID. Alguém poderia me ajudar a subir programas como daemon? Desde já agradeço.
Atenciosamente,
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
tifoski
...Estou precisando iniciar um programa no SUSE como daemon. Eu consegui fazer com que o programa suba na inicialização do SUSE colocando os comandos no /etc/init.d/boot.local, porém, preciso que seja como daemon, para que possa utilizar o start, stop, restart e etc. Da forma que coloquei, não consigo, ele apenas sobe e da o PID. Alguém poderia me ajudar a subir programas como daemon?
Você pode seguir as sugestões do template[1] de script de inicialização, ou também seguir tutoriais[2][3] que atendem especificamente sua necessidade.
Um dos tutoriais[2] demonstra como instanciar uma aplicação Java, como serviço, no OpenSUSE. Com pequenos ajustes, é possível alterar para qualquer outro executável, diferente da aplicação Java, proposta originalmente no tutorial. Em outro tutorial[3], o exemplo é semelhante, entretanto de propósito geral.
Citação:
Postado originalmente por
tifoski
Desde já agradeço.
Mantenha-nos informado sobre seu progresso :)
[1] /etc/init.d/skeleton
[2] http://www.source-code.biz/snippets/java/7.htm
[3] http://www.novell.com/coolsolutions/feature/15380.html
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
trober
Você pode seguir as sugestões do template[1] de script de inicialização, ou também seguir tutoriais[2][3] que atendem especificamente sua necessidade.
Um dos tutoriais[2] demonstra como instanciar uma aplicação Java, como serviço, no OpenSUSE. Com pequenos ajustes, é possível alterar para qualquer outro executável, diferente da aplicação Java, proposta originalmente no tutorial. Em outro tutorial[3], o exemplo é semelhante, entretanto de propósito geral.
Mantenha-nos informado sobre seu progresso :)
[1] /etc/init.d/skeleton
[2]
http://www.source-code.biz/snippets/java/7.htm
[3]
http://www.novell.com/coolsolutions/feature/15380.html
Bom dia,
Cara, consegui fazer funcionar, ele sobe certinho, consigo dar start, ver o status, mas não estou conseguindo dar um stop no serviço. Já fiz diversas modificações para dar o stop mas ele não da este stop. Segue o meu script para ter uma noção dele como um todo:
Código :
[FONT=arial]### BEGIN INIT INFO[/FONT]
[FONT=arial]# Provides: TRANSX[/FONT]
[FONT=arial]# Required-Start: $syslog $remote_fs[/FONT]
[FONT=arial]# Required-Stop: $syslog [/FONT]
[FONT=arial]# Default-Start: 3 5[/FONT]
[FONT=arial]# Default-Stop: [/FONT]
[FONT=arial]# Description: Servico TRANSX[/FONT]
[FONT=arial]### END INIT INFO[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]SERV=transx[/FONT]
[FONT=arial]APPPATH="/transx/recargametro"[/FONT]
[FONT=arial]JAVA_BIN="/root/jdk1.7.0_25/bin/java"[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]PAYLOAD="transx-1.0.103.jar"[/FONT]
[FONT=arial]PIDFILE="/var/run/$SERV.pid"[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]start() {[/FONT]
[FONT=arial] echo -n "Starting $SERV: "[/FONT]
[FONT=arial] if [ -f $PIDFILE ]; then[/FONT]
[FONT=arial] PID=`cat $PIDFILE`[/FONT]
[FONT=arial] echo $SERV already running $PID.[/FONT]
[FONT=arial] exit 2;[/FONT]
[FONT=arial] else[/FONT]
[FONT=arial] cd $APPPATH[/FONT]
[FONT=arial] nohup $JAVA_BIN -jar $PAYLOAD &> /dev/null &[/FONT]
[FONT=arial] RETVAL=$?[/FONT]
[FONT=arial] [ $RETVAL -eq 0 ] && touch $PIDFILE && echo `ps aux | grep $PAYLOAD | grep -v grep | awk {'print $2'}` > $PIDFILE[/FONT]
[FONT=arial] echo OK[/FONT]
[FONT=arial] return $RETVAL[/FONT]
[FONT=arial] fi[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]}[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]stop() {[/FONT]
[FONT=arial] echo -n "Stopping $SERV: "[/FONT]
[FONT=arial] if [ -f $PIDFILE ]; then[/FONT]
[FONT=arial] PID=`cat $PIDFILE`[/FONT]
[FONT=arial] kill $PID && rm -f $PIDFILE[/FONT]
[FONT=arial] echo OK[/FONT]
[FONT=arial] return 0[/FONT]
[FONT=arial] else[/FONT]
[FONT=arial] echo "not running or pid file is gone."[/FONT]
[FONT=arial] fi[/FONT]
[FONT=arial]}[/FONT]
[FONT=arial]
[/FONT]
[FONT=arial]status() {
if [ -f $PIDFILE ]; then
echo "running"
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 $?
[/FONT]
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
tifoski
Bom dia,
Cara, consegui fazer funcionar, ele sobe certinho, consigo dar start, ver o status, mas não estou conseguindo dar um stop no serviço. Já fiz diversas modificações para dar o stop mas ele não da este stop. Segue o meu script para ter uma noção dele como um todo:
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
nohup $JAVA_BIN -jar $PAYLOAD &> /dev/null &
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $PIDFILE && 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
echo "running"
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 $?
Ao publicar códigos e porções de script, recomendo usar a TAG CODE, para formatar a aparência, promovendo assim maior legibilidade :)
Em relação a impossibilidade de parar o serviço, faço as seguintes perguntas:
1) O arquivo /var/run/transx.pid está sendo criado?
2) Se a resposta for sim, para a pergunta anterior, o PID é condizente com o PID do processo de "recargametro"?
3) Não é redundante o uso de 'nohup' num script de serviço?
Re: Inicializar programa como serviço
Citação:
Postado originalmente por
trober
Ao publicar códigos e porções de script, recomendo usar a TAG CODE, para formatar a aparência, promovendo assim maior legibilidade :)
Em relação a impossibilidade de parar o serviço, faço as seguintes perguntas:
1) O arquivo /var/run/transx.pid está sendo criado?
2) Se a resposta for sim, para a pergunta anterior, o PID é condizente com o PID do processo de "recargametro"?
3) Não é redundante o uso de 'nohup' num script de serviço?
Bom dia, desculpe, utilizarei da próxima.
Resposta para as questões 1 e 2: sim.
Referente a questão 3: Ainda sou iniciante no linux, então tenho muitas dificuldades. O nohup já era usado para iniciar a aplicação manualmente nos servidores da empresa, por isso continuei utilizando ele. Há alguma forma de colocar este serviço no ar, sem o nohup neste script?
Atenciosamente,
Lucas Farias