# [INIT] Runlevel retardado (SOLUCIONADO)

## sirope

HoLaa!!!

Trato de reducir el tiempo de arranque de una maquina bastante antigua con Gentoo. Ya tengo el inicio de demonios en paralelo, he colocado las X en el nivel boot y al fin he logrado 15 segundos para llegar a KDM.

No se si sera posible, pero se me ocurre crear un runlevel en el que la PC entre pero despues de cierto tiempo.

Por ejemplo: Enciendo la maquina y me dedico a hacer un documento de texto, luego 2 horas de trabajo lo imprimo, pero entonces ?Para que inicie CUPS con el arranque? No habria ningun inconveniente en iniciarlo 3 o 4 minutos luego de haber terminado de arrancar, de hecho, ni me daria cuenta, de este modo resto 1.5 segundos de inicio. 

Lo mismo podria aplicarse con Samba, y otros demonios.

?Es posible?

Un saludo.Last edited by sirope on Mon Oct 22, 2007 5:29 pm; edited 1 time in total

----------

## sefirotsama

Lo mejor seria no iniciar por defecto el servicio que deseas retardar y cuando lo necesites iniciarlo manualmente (¿cómo sabes cuando iniciaras acabaras el trabajo para imprimir? ?y si un dia quieres imprimir nada más iniciar?). De todas maneras los servicios que no usas aún estando iniciados pasan a estar dormidos y su consumo és mínimo.

Si aún así quieres seguir adelante, lo que puedes hacer es crear un script, asegurandote que esté en el sitio correcto poniendo que es requerido por los scripts que quieres retardar, o al inicio del runlevel que quieras crear, con una función de retraso de tiempo.

Hay un comando para bash que lo hace, se le pasa por argumento los segundos que quieres que se retrase (no recuerdo su nombre). Si aún quieres seguir haciendo eso (no recomendable, pues en el peor de los casos habras de esperar X tiempo innecesariamente) puedo decirte como se llamaba cuando llegue a casa.

----------

## sefirotsama

El comando que te decia era sleep

```
       Pause for NUMBER seconds.  SUFFIX may be `s' for seconds (the default),

       `m' for minutes, `h' for hours or `d' for days.  Unlike most  implemen-

       tations  that require NUMBER be an integer, here NUMBER may be an arbi-

       trary floating point number.  Given two or more  arguments,  pause  for

       the amount of time specified by the sum of their values.
```

Puedes probarlo en el bash a que te retrase 5 segundos:

```
sleep 5
```

A partir de aquí tu mismo.

----------

## jgascon

Puedes meter todos los servicios que quieras retrasar en /etc/conf.d/local.start añadiéndoles el sleep que te decia sefirotsama. Éste archivo controla los programas que ejecutará /etc/init.d/local que es el último script de inicio en arrancar. Para que cups arranque 3 minutos después de arrancar la máquina podrías probar a añadir lo siguiente a  /etc/conf.d/local.start:

```

sleep 180 /etc/init.d/cups start &>/dev/null

```

Asegúrate de arrancar los servicios necesarios para otros servicios en boot o default y añade los demás a  /etc/conf.d/local.start y nos cuentas que tal funciona el experimento  :Wink: 

----------

## gringo

 *Quote:*   

> ¿Para qué inicié CUPS con el arranque?

 

revisa la doc de udev : puedes p.ej. hacer que cups solo se lance cuando conectes la impresora  :Wink: 

Hay tb. una solución guarra "á la windows" que es añadir xdm al boot. Con eso lo que consigues es que las X se lancen un poco antes y mientras tanto el resto de scripts se siguen ejecutando.

Hay otros inits por ahí, einit o initng que dicen que son mas rápidos que baselayout, pero ni idea, no los he probao.

Y no olvides la regla de oro : borra todo aquello que sólo uses espontáneamente de los runlevels y lánzalo a mano !

saluetes

----------

## sirope

Gracias por sus respuestas... Muy interesante lo que dice el gringo, voy a investigar un poco mas de eso que ya hacia falta.

Meter el sleep a local deberia funcionar.. Aun estoy en el stage2,  pero ya les canto como me fue.

Saludoss..  :Smile: 

----------

## i92guboj

 *gringo wrote:*   

>  *Quote:*   ¿Para qué inicié CUPS con el arranque? 
> 
> revisa la doc de udev : puedes p.ej. hacer que cups solo se lance cuando conectes la impresora 
> 
> Hay tb. una solución guarra "á la windows" que es añadir xdm al boot. Con eso lo que consigues es que las X se lancen un poco antes y mientras tanto el resto de scripts se siguen ejecutando.
> ...

 

Lo que aporta gringo aquí es lo más sensato.

La solución del sleep no la recomiendo, porque se cargaría todo el sistema de dependencias. Me refiero a lo siguiente: los scripts de inicio tienen una jerarquía de dependencias, entonces, si el paquete A requiere a B, pero B no termina de iniciarse porque se ha lanzado con retardo según el método del sleep, entonces tendremos a dos paquete bloqueados, y no solo el que nosotros hemos colocado. No se las implicaciones que esto podría tener. Según lo que yo se del init de gentoo (que jamás he mirado en profundidad) lo más normal es que si A requiere a B y B no se ha lanzado aún, al iniciar A, B se inicie solo.

Luego se lanzará una nueva instancia de B desde local con el sleep, las implicaciones de esto tan solo dependen de como esté diseñado cada script, y puede traer problemas...

Por supuesto, si solo lo quieres para cups, y estás seguro de que ningún otro script depende de cupsd, entonces supongo que hoy hay problema. Aunque en cualquier caso no es una solución muy elegante.

Como dice gringo, usar udev, ya que está ahí, es lo mejor. Y ahí no debería haber fallo. Jamás he probado, pero no creo que sea más complicado que escribir una regla para tu joystick o para un pen drive usb. Puedes mirar en este link:

http://reactivated.net/writing_udev_rules.html

Hay una sección abajo que se titula "Running external programs upon certain events" y creo que es justo lo que necesitas. Si no das en la tecla, supongo que te podremos ayuda con el tema.

----------

## sirope

Si, tambien he podido observar el asunto de los runlevels, si A necesita B, B se ejecuta automaticamente: Ejecutar samba levanta automaticamente eth0... No planeaba retardar demonios importantes, solo los prescindibles como cups y samba. 

Lo tendre en cuenta, me viene bien la info thnxD 

La solucion de gringo se ve inteligente, moderna y sobre todo mas practica. Nada mas que la impresora esta en una red Windows a traves de samba. Y lanzar cups cuando encienda la PC con la impresora no lo veo muy factible.  :Confused: 

Esto me servira para mas que una impresora, habia estado buscando pero no encontraba mucha info, gracias por el link. xD

----------

## jgascon

Estoy intentando tunear un Celeron a 850MHz para que aaranque más rápido y he encontrado esto: HOWTO prefetch files on boot. Yo la verdad es que con la configuración básica no noto la diferencia pero igual te es úitl  :Wink: 

----------

## sirope

Mmmm.. Tiene sentido, gracias por el link, lo probare.

SaLu2...   :Very Happy: 

----------

## jgascon

Si vas a usar readahead-list pon a no el RC_PARALLEL_STARTUP en el /etc/conf.d/rc yo he ganado 8 segundos haciéndolo  :Wink: 

La razón es que se tiene que completar el proceso de readahead antes de lanzar el resto de servicios para obtener algún beneficio del readahead. Aquí lo explican un poco mejor TIP: Improve bootup speed by reprofiling bootup en la parte que pone BONUS HACK!.

----------

## sirope

 :Shocked:   :Shocked:   :Shocked:   Y es por eso que al principio no notabas la diferencia!

Saluditossss   :Very Happy:   :Very Happy:   :Very Happy:  y gracias   :Cool: 

----------

