Linux en Espanol
 
Ejecutar scritp al inicio con Debian y derivados (tema #24659)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Estaciones de Trabajo
Autor Mensaje
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-02-19 20:49:11    Asunto: Ejecutar scritp al inicio con Debian y derivados

[size=15:52ec26d447]Iniciar script con linux[/size:52ec26d447]
Buenas pues este es un Post donde voy a explicaros como ejecutar un script creado por nosotros o no al inicio de nuestro sistema

Esto tiene multitud de utilidades como configurar la red al inicio configurar tablas arp enrutamiento etc...

Para empezar crearemos nuestro script llamado servicio
en /etc/init.d/

Con este contenido
[code:1:52ec26d447]!#/bin/bash
arp -a [ip] [mac][/code:1:52ec26d447]
En este ejemplo haremos un arp est?tico pero pod?is poner lo que quera?s

le damos permiso de ejecuci?n
[code:1:52ec26d447]sudo chmod +x /etc/init.d/servicio[/code:1:52ec26d447]

ahora usaremos el comando
[code:1:52ec26d447]update.rc.d servicio defaults[/code:1:52ec26d447]
con esto a?adiremos nuestro archivo servicio al inicio

Por ?ltimo para que se inicie ahora y en las dem?s sesiones usamos el comando
[code:1:52ec26d447]sudo service servicio start[/code:1:52ec26d447]
o
[code:1:52ec26d447]sudo /etc/init.d/servicio start[/code:1:52ec26d447]

Bueno espero que os haya ayudado este minitutorial.
Me hubiera venido muy bien a mi cuando no sab?a hacerlo jeje.
Saludos
rafaxdrake
Forista


Registrado: 2004-02-21
Mensajes: 3928

Publicado: 2013-02-19 23:04:56    Asunto:

Estupendo, muchas gracias hombre. :)
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-02-19 23:48:01    Asunto:

Hola.

El m?todo que nos propone cazademonios es algo m?s que la ejecuci?n de un programa en el arranque. Es el m?todo normalizado para el arranque y parada de servicios en linux. Por ello hay alg?n punto que debe ser tenido en cuenta para que no tengamos efectos colaterales indeseados por usarlo para ejecutar un programa en el arranque.
Hay que tener en cuenta que el script es ejecutado autom?ticamente en el arranque al llegar al runlevel en el que se ha instalado y [b:78d405dffe]es ejecutado de nuevo en la parada del sistema[/b:78d405dffe] al abandonar el runlevel. Si nuestro script hace algo que deba ser ejecutado al arrancar pero no deba ser ejecutado al parar, tendremos un problema.
Para evitar este problema, debemos controlar en nuestro script si se nos est? invocando con el par?metro "start" o "stop". De esta forma sabremos si el script ha sido llamado porque se entra en el runlevel o se abandona, que "en general" corresponde a que el sistema est? arrancando o parando respectivamente.
Otra cosa a tener en cuenta es si los comandos que queremos ejecutar dependen de que alg?n servicio determinado ya est? arrancado. Por ejemplo, un script que mande a imprimir algo seguramente querr? que cupsd haya arrancado. Un arp seguramente necesitar? que los servicios de red hayan arrancado. Eso se gestiona de modo diferente dependiendo de la distro.
En opensuse (y supongo que todas las derivadas de suse) y en debian (y supongo que sus derivadas), hay que definir un bloque de comentarios con una sintaxis concreta que le dan esa informaci?n al instalador de servicios. Pongo un ejemplo del demonio smb de un opensuse
[code:1:78d405dffe]### BEGIN INIT INFO
# Provides: smb
# Required-Start: $network $remote_fs syslog
# Should-Start: cupsd winbind nmb
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Samba SMB/CIFS file and print server
# Description: Samba SMB/CIFS file and print server
### END INIT INFO
[/code:1:78d405dffe]
En oracle linux y centos (y por tanto supongo que todas las derivadas de red hat) es una sola l?nea de comentarios la que hay que poner con la informaci?n.
Pongo un ejemplo del demonio sshd de un centos (la l?nea es la de chkconfig):
[code:1:78d405dffe]#!/bin/bash
#
# Init file for OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: OpenSSH server daemon
#
[/code:1:78d405dffe]
Y mirando esto me he ido a ver un sabayon (derivado de gentoo) y lo que he visto me ha dejado totalmente descolocado. A ver si alg?n forero aporta informaci?n sobre la familia gentoo.

Aunque tambi?n, si est?s usando update.rc.d, esa informaci?n la puedes pasar en la propia l?nea de comandos update-rc-d servicio, en vez de default. Como opini?n personal, creo que es mejor que esos datos est?n en el script de modo que sean consultables m?s f?cilmente. Aunque sean consultables por comando, siempre es m?s c?modo leerlos en el propio script.

Saludos.
rafaxdrake
Forista


Registrado: 2004-02-21
Mensajes: 3928

Publicado: 2013-02-20 00:30:30    Asunto:

Otra cosa a tener en cuenta a fecha de hoy, enfocada m?s que nada a la gesti?n general de servicios, es la migraci?n de sysv a systemd en la mayor?a de distros modernas, con su nueva forma de gestionar los servicios.
TheBalrog
BOFH
Registrado: 2004-04-05
Mensajes: 3012

Publicado: 2013-02-20 01:16:18    Asunto:

Arch ya tiene por defecto a Systemd para tales cuestiones. Dar el "brinco" implica leer bastante, a?n no termino de agarrarle el gusto pero es lo que hoy y ni modo.
rafaxdrake
Forista


Registrado: 2004-02-21
Mensajes: 3928

Publicado: 2013-02-20 01:32:46    Asunto:

No me termin? de gustar arch y la tuve puesta s?lo una semana. ?C?mo gestion?is vosotros los servicios? Yo estoy tirando de service, de chkconfig y de systemctl, que es el interfaz de systemd, y me parece un caos.
TheBalrog
BOFH
Registrado: 2004-04-05
Mensajes: 3012

Publicado: 2013-02-20 02:27:16    Asunto:

Le agarr? el gusto desde hace a?os, luego de pasar por Slackware y Gentoo. Lo hacemos mediante systemd y coincido contigo.

https://wiki.archlinux.org/index.php/Systemd
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-02-20 14:22:22    Asunto:

?Entonces cual ser?a el m?todo correcto de realizarlo?
?Para ejecutar un script al inicio en una distro debian?
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-02-20 23:13:36    Asunto:

Hola.

Lo que has hecho est? bien. S?lo te queda a?adir en el script si el par?metro $1 es "start" para saber que se est? llamando en el arranque y no en el apagado.
Tambi?n puedes aprovechar si el par?metro es "stop" por si necesitas deshacer algo de lo que hiciste en el arranque. Pero si no lo necesitas, ign?ralo.
Y si te da igual que tu script se ejecute en el arranque y en la parada, d?jalo tal cual lo has hecho, es correcto.
Todo el rollo que te hemos contado es para que seas consciente de que el m?todo que has elegido tiene muchas m?s posibilidades, pero lo que has hecho est? bien.

Tambi?n puedes probar si en tu m?quina hay un /etc/rc.local y poner una llamada a tu script all?, pero yo lo veo mejor como lo has hecho.

Saludos.
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-02-23 14:21:30    Asunto:

Disculpa no he entendido bien a?ado dentro del script esto "$1" ?

es decir asi?
[code:1:dbaaf7e028]$1
arp [ip][mac][/code:1:dbaaf7e028]
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-02-23 19:45:07    Asunto:

Hola.

La idea es transformar el script
[code:1:4632140b27]arp [ip][mac][/code:1:4632140b27]
en algo como esto
[code:1:4632140b27]#!/bin/bash
case "$1" in
start)
arp [ip][mac]
;;
stop)
echo El parametro es stop. No tengo nada planeado que hacer
;;
*)
echo ERROR. Debe llamar a este script con los parametros start o stop
;;
esac[/code:1:4632140b27]
Lo que pongas entre "start)" y ";;" se ejecutar? en el arranque.
Lo que pongas entre "stop)" y ";;" se ejecutar? en la parada.

Saludos.





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries