11 octubre 2005

Crear nuevo servicio en Linux

Los servicios de Linux están en /etc/init.d o /etc/rc.d/init.d en forma de shell scripts. Para añadir uno (por ejemplo para tomcat) hay que generar un script con la estructura que tienen los scripts existentes (que admita los parámetros start y stop) y debe llevar comentado al principio lo siguiente:

# chkconfig: 345 80 20
# description: Tomcat is the Apache Servlet Engine
# processname: tomcat
# pidfile: /var/run/tomcat.pid

La primera línea indica al instalador que el servicio se va a ejecutar en los niveles 3, 4 y 5, y que la prioridad de inicio del servicio será 80 y la de finalización 20.
Las segunda línea muestra la descripción del servicio.
Las otras dos líneas son opcionales.

Para instalar el servicio una vez que ha sido correctamente creado el script (probar ejecutando 'tomcat start' y 'tomcat stop') se debe escribir: chkconfig --add tomcat

Ejemplo de script para tomcat:

#!/bin/sh
# This shell script starts and stops tomcat.
# chkconfig: 345 80 20
# description: Tomcat is the Apache Servlet Engine
# processname: tomcat
# pidfile: /var/run/tomcat.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
RETVAL=0
export JAVA_HOME=/usr/local/java
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting tomcat: "
$CATALINA_HOME/bin/catalina.sh start
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/tomcat
echo
;;
stop)
# Stop daemons.
echo -n "Shutting down tomcat: "
$CATALINA_HOME/bin/catalina.sh stop
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/tomcat
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: tomcat {start|stop|restart}"
exit 1
esac
exit $RETVAL

2 comentarios:

alexia dijo...

Hola, estoy escribiendo mi script de tomcat, y me encontre con tu blog....
Te falta algo que a mi tambien me falta y no encuentro como hacerlo de una manera ordenada.
Es que borre el proceso tomcat del listado de procesos. Al parar tomcat con el demonio tomcat (ya sea usando adentro del fuente, shutdown.sh o catalina.sh stop) no borra el proceso, y si haces un ps lo ves (porque no se limpia el listado, pero el proceso no existe).
Como se podria eliminar los pids que estan muertos??
Es que los desarrolladores se confunden al ver el ps ( no entienden de servidores, solo desarrollan)
;-)
saludos y gracias , ojala tengas alguna pista
alexa

eTaTuS dijo...

Hola, no sé si te he entendido bien, pero si lo que quieres es borrar todo lo relacionado con los procesos del tomcat que se ejecuta con la máquina virtual java, puedes intentar

> killall java

(Ojo que si tienes algunha otra aplicación java ejecutándose también se matará su proceso)

Para matar un proceso con PID 1234 puedes ejecutar

> kill 1234

y si no funciona

> kill -7 1234


Un saludo:

eTaTuS