¿Cómo puedo hacer que un script en /etc/init.d comience en el arranque?


83

Creo que leí algo hace un tiempo sobre esto, pero no recuerdo cómo se hizo. Básicamente, tengo un servicio en el /etc/init.dque me gustaría iniciar automáticamente en el momento del arranque. Recuerdo que tiene algo que ver con vincular el script al /etc/rc.ddirectorio, pero no puedo recordarlo en este momento. ¿Cuál es el comando para esto?

Creo que estoy en un derivado de Fedora / CentOS.


Eso depende de su sistema operativo. ¿Qué variante de Unix está ejecutando, y si Linux, qué distribución? Entre los cuales /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.localy algunos más tiene?
— Gilles

1
Creo que estoy en CentOS o algo así. ¿La respuesta sería diferente para Debian? También estoy interesado en una solución para Debian.
— Naftuli Kay

Respuestas:


109

Si está en un sistema basado en Red Hat, como mencionó, puede hacer lo siguiente:

  1. Cree un guión y colóquelo en /etc/init.d(por ejemplo /etc/init.d/myscript). El script debe tener el siguiente formato:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

El formato es bastante estándar y puede ver los scripts existentes en /etc/init.d. A continuación, puede usar el script como /etc/init.d/myscript starto chkconfig myscript start. La ckconfigpágina del manual explica el encabezado del script:

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

El código de inicio, detención y estado de ejemplo utiliza funciones auxiliares definidas en /etc/init.d/functions

  1. Habilita el script

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. Verifique que el script esté habilitado; debería ver "on" para los niveles que seleccionó.

    $ chkconfig --list | grep myscript
    

3
Chkconfig es lo que quieres. +1
— whoami

¿Por qué init inicia algo en los niveles de ejecución 2, 3, 4 y 5? ¿No tiene que tener cuidado para evitar iniciar un servidor en el nivel de ejecución 2? Y el nivel de ejecución 4 no está definido en RHEL de todos modos, entonces, ¿por qué intentar iniciarlo en ese nivel de ejecución? No críticas, solo ganas de saber. Soy un usuario nativo de Slackware.
— Bruce Ediger

4 no está definido en RHEL, pero existe. Puedes robarlo por tus propias cosas.
— Kevin M

El encabezado se toma de la página de manual de chkconfig. Personalmente me quedo con 235 o solo 35 en la mayoría de los casos.
— canen

¿Hay algún registro que pueda ver si algo no se inicia durante el inicio?
— Utkarsh Sinha

10

Usted prueba, en qué nivel de ejecución normalmente comienza su máquina.

runlevel

A menudo esto es 5 o 2, hay varias convenciones, pero nada realmente establecido, afaik. Ubuntu usa 2, mientras que la distribución anterior que usaba siempre usaba

  • 1 usuario individual (superusuario)
  • 2 multiusuario
  • 3 multiusuario + red
  • 4 no utilizado / definible por el usuario
  • 5 multiusuario, red + X11

Luego haces un enlace simbólico desde tu script de inicio, tal vez /etc/init.d/foobarpara/etc/rc2.d/SXYfoobar

S significa 'Iniciar este script en este nivel de ejecución (aquí: 2). XY es un número decimal de dos dígitos, que es relevante para la secuencia, se inician los scripts.

Si depende de que el script S45barfoo se ejecute antes que usted, y S55foofoo depende de su script, elegiría xy entre 45 y 55. Para números iguales, el orden de arranque no está definido.

Mientras tanto, Ubuntu cambió (está cambiando) a otro procedimiento de inicio, llamado upstart.

Y tenga en cuenta: no siempre los enlaces enlazan a /etc/rcX.dveces, es /etc/init/rcX.dalgo similar, pero debería ser fácil de encontrar, en algún lugar debajo de / etc.

Si desea iniciar algo al final de los scripts de inicio, /etc/rc.localsería un archivo para buscar, pero si depende de que X11 ya se esté ejecutando, puede buscar una opción de inicio automático de su entorno de escritorio, o /etc/X11/Xsession.d/con un patrón similar al descrito encima.

Si depende de que la red esté activa, hay un directorio separado (if-up.d) y para dispositivos montados como unidades USB externas /etc/udev/rules.d/.


¿No hay un comando que haga el enlace simbólico por ti? Pensé que recordaba algo así.
— Naftuli Kay

1
¿No fue así update-rc.d?
— Naftuli Kay

GUI o línea de comando? Su DE podría proporcionar una herramienta para marcar los niveles de ejecución, dónde comenzar o detener su script. He visto algo así, pero no recuerdo un nombre y cómo especificar el número (xy).
— Usuario desconocido el

Línea de comando. Maneja los enlaces simbólicos por usted y le permite activar los interruptores en función de si ciertas secuencias de comandos se ejecutan o no.
— Naftuli Kay

3

Como Naftuli Tzvi Kay preguntó sobre Debian arriba: a partir de Debian 6, su script debe contener un encabezado LSB (Base de estándares de Linux) que indique sus dependencias y capacidades ( consulte la página wiki de Debian ).

Si hay un encabezado LSB, puede usarlo insservpara incluir su script en el proceso de arranque ( vea otra página wiki de Debian ).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.