Como crear un servicio en Linux

Imagen de elgabo

Forums: 

Hola amigos, tengo una duda y espero que me puedan ayudar
Quiero saber si alguien tiene un formato o plantilla para crear servicios en Linux, de lo que he leido los servicios se crear añadiendo un script a la carpeta /etc/init.d
Me pueden confirmar si estoy en lo cierto y ayudarme dandome algunos tips para poder hacerlo.
Especificamente lo que deseo es correr un script .sh que esta dentro de mi home, abra algun problema que este script este dentro de mi carpeta? Por cierto, el script es para correr un servidor Tomcat, y depende de una variable de ambiente JAVA_HOME, esta la tengo definida dentro de mi .bash_profile, tendre que definirla en algun otro lugar para que se pueda utilizar como servicio?
Gracias por la ayuda.

Esqueleto

Imagen de pepo

HOla...

En debian lo encuentras en /etc/init.d/skeleton , supongo que habrá algo por allí parecido en el resto de distribuciones.

Saludos

Linux User Registered #232544
Jabber : pepo@jabberes.org
ICQ : 337889406
GnuPG-key : www.keyserver.net

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
GnuPG-key : www.keyserver.net

Estoy utilizando Mandrake

Imagen de elgabo

Hola,
Estoy utilizando Mandrake 10.2, este es el contenido de mi /etc/init.d

[cmi@localhost ~]$ ls /etc/init.d/
alsa* haldaemon* keytable* mDNSResponder* nfslock* postfix* udev*
atd* halt* kheader* messagebus* nifd* postgresql* usb*
bluetooth* harddrake* killall* mtink* numlock* rawdevices* xfs*
crond* hidd* mandrake_consmap mysqld* oki4daemon* shorewall*
dm* hotplug* mandrake_everytime* netfs* pand* single*
dund* httpd* mandrake_firstime* netplugd* partmon* sound*
functions* iptables* mdadm* network* portmap* syslog*

ya he revisado alguno, pero como no entiendo mucho sobre scripts estoy un poco perdido. Lo que me gustaria saber es si alguno de ustedes ya a realizado algun script de estos, como dije antes para iniciar debe llamar un script .sh que esta dentro de mi carpeta /home/cmi y el script utiliza una variable de ambiente JAVA_HOME que la he definido dentro de mi sesion en mi .bash_profile; para parar el demonio tambien se llama otro .sh. Voy a buscar en internet si encuetro un "esqueleto" de este tipo de archivos, pero lo que quisiera saber es si lo expuesto anteriormente va a causar algun problema, por ejemplo, si deberia pasar el directorio del programa a /usr/local o definir JAVA_HOME en algun otro lugar.
Gracias por la ayuda.

Imagination is more important than Knowledge -- Albert Einstein

Imagination is more important than Knowledge -- Albert Einstein
Errar es humano, pero para dañar las cosas realmente bien, pero bien de verdad, necesitas la contraseña de root.

si es en mandrake, prueba

Imagen de kfirmad Kronsage

si es en mandrake, prueba darle un man chkconfig, puede ayudarte en algo, yo recuerdo que cuando instalaba postgresql en mandrake 9.0, el servicio lo debía instalar con el comando chkconfig, pero este rato no recuerdo bien el resto de la instrucción, pero más chance voy a revisar mis notas porque eso si lo document&eactute; y te lo pongo acá...

LINUX ES LIBERTAD!!

----------------------------
Cada día más Grande... y no lo detiene nadie!!

Hola, gracias por la

Imagen de elgabo

Hola, gracias por la respuesta, estuve revisando el manual de chkconfig como me dijiste y esta herramienta permite manejar los links simbolicos que se crean en las carpetas /etc/rc[0-6].d, (donde 0-6 es el runlevel) estuve revisando el directorio /etc/rc5.d y efectivamente esta llena de links y estos links van a los scripts que estan dentro de la carpeta /etc/init.d. Lo que quiero saber es si alguien tiene una plantilla de como deben ser los scripts para correr un archivo .sh, tambien deseo saber si dentro de estos scripts se puede escribir un comando como export, ya que quiero definir una varible de ambiente JAVA_HOME, porque el programa que utilizo (es el Apache Tomcat) necesita que este definida dicha variable. Lo que pasa es que me da miedo no escribir bien el script y no poder arrancar la maquina :(
[quote=pepo]
En debian lo encuentras en /etc/init.d/skeleton , supongo que habrá algo por allí parecido en el resto de distribuciones.
[/quote]

Y si no es mucha molestia pepo, podrias poner el script /etc/skeleton para que todos lo podamos ver?
Gracias

Imagination is more important than Knowledge -- Albert Einstein

Imagination is more important than Knowledge -- Albert Einstein
Errar es humano, pero para dañar las cosas realmente bien, pero bien de verdad, necesitas la contraseña de root.

No hay problema, aqui el /etc/init.d/skeleton

Imagen de pepo


#! /bin/sh
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
#
# Author: Miquel van Smoorenburg .
# Ian Murdock .
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
#
# Version: @(#)skeleton 2.85-23 28-Jul-2004 miquels@cistron.nl
#

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="some daemon"
NAME=daemon
DAEMON=/usr/sbin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

# Read config file if it is present.
#if [ -r /etc/default/$NAME ]
#then
# . /etc/default/$NAME
#fi

#
# Function that starts the daemon/service.
#
d_start() {
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON \
|| echo -n " already running"
}

#
# Function that stops the daemon/service.
#
d_stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--name $NAME \
|| echo -n " not running"
}

#
# Function that sends a SIGHUP to the daemon/service.
#
d_reload() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--name $NAME --signal 1
}

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
#reload)
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
# If the daemon responds to changes in its config file
# directly anyway, make this an "exit 0".
#
# echo -n "Reloading $DESC configuration..."
# d_reload
# echo "done."
#;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: $NAME"
d_stop
# One second might not be time enough for a daemon to stop,
# if this happens, d_start will fail (and dpkg will break if
# the package is being upgraded). Change the timeout if needed
# be, or change d_stop to have start-stop-daemon use --retry.
# Notice that using --retry slows down the shutdown process somewhat.
sleep 1
d_start
echo "."
;;
*)
# echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0

Linux User Registered #232544
Jabber : pepo@jabberes.org
ICQ : 337889406
GnuPG-key : www.keyserver.net

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
GnuPG-key : www.keyserver.net

Los procesos en init

Imagen de danmk3

Te recomiendo que revises esta guía para conocer como hacer "booteable" un proceso.

En esta otra guía y puedes usar como base este script te ayudarán a poner en funcionamiento a tomcat como un servicio "booteable", el kit del asunto está en chkconfig:

chkconfig --level=345 servicio estado-por-default_on-off

Recomendación:

1)Nunca de los nunca se debe cambiar la ubicacion estandar de los script o programas que inician un cierto servicio, hay que ser ordenado, para eso sirven los estándares.

2) Nunca asumas que las variables de entorno de root pasan por default al programa-servicio que es "booteable".

3) Los servicios "propios" pueden ser agregados en xinitd, initd o inittab solo cuando sean estables y no necesiten el paso de varias variables-parámetros, por esto se recomienda, generalmente, usar scripts en init.d, inittab es util para crear terminales virtuales con screen

Saludos Danmk3

 

}:) Soy el error 0xC000021A de tu Micro$oft Guindous }:)

}:) Soy el error 0xC000021A de tu Micro$oft Guindous }:)

Muchas gracias por la ayuda

Imagen de elgabo

Muchas gracias por la ayuda ! :)

Definitivamente muy buena la guia para aquellos que recien estan empezando con esto de los servicios, nada mejor que una pequeña practica.
Tambien gracias a pepo por el skeleton, de aqui solo queda coger una maquina y seguir los pasos, gracias a todos.
Imagination is more important than Knowledge -- Albert Einstein

Imagination is more important than Knowledge -- Albert Einstein
Errar es humano, pero para dañar las cosas realmente bien, pero bien de verdad, necesitas la contraseña de root.