He creado un script para iniciar un servidor (mi primera pregunta). Ahora quiero que se ejecute en el arranque del sistema e inicie el servidor definido. ¿Qué debo hacer para hacer esto?
Mis hallazgos me dicen que coloque este archivo en la /etc/init.d
ubicación y se ejecutará cuando se inicie el sistema. ¿Pero no puedo entender cómo será el primer argumento sobre el inicio start
? ¿Está esto predefinido en algún lugar para usar start
como $1
? Si quiero tener un caso startall
que inicie todos los servidores en el script, ¿cuáles son las opciones que puedo administrar?
Mi guión es así:
#!/bin/bash
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $0 (start|stop|restart)"
;;
esac
linux
shell-script
centos-5
vijay.shad
fuente
fuente
Respuestas:
/etc/init.d
es el directorio de script, en el que aparecen los scripts ejecutables. Sin embargo, para ejecutar secuencias de comandos en un orden particular después de que se inicie su sistema, debe agregar archivos al/etc/rc#.d
directorio. Las entradas que aparecen aquí le indican a su sistema en qué orden y en qué nivel de ejecución/etc/init.d
deben ejecutarse los scripts . El número después del rc indica en qué nivel de ejecución está funcionando la máquina, de acuerdo con este gráfico:http://en.wikipedia.org/wiki/Runlevel
Entonces si tienes:
Entonces necesitas los archivos (vacíos):
La S significa comenzar, y la K significa matar. Cuando su máquina se inicia, el sistema dirá "Ah, estoy ejecutando en RunLevel 3, pasemos a rc3.d para ver qué scripts en '/etc/init.d' necesitan ejecutarse y en qué orden". En este caso, el sistema ordenará por 'S' y luego el número después de 'S' y ejecutará '/etc/init.d/importantscript start'. El 20 es solo para fines de pedido ... su script se ejecutará detrás de 'S19' y delante de 'S21'. Puede crear estos archivos simplemente haciendo:
sudo touch /etc/rc.d/rc3.d/S20importantscript
Aquí también hay un buen resumen: http://www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts
fuente
No tiene que --- y no debería --- crear archivos en
/etc/rc.d/rcN.d/
; lo que debes hacer es poner un comentario en la lectura de tu script de iniciodonde
NNN
es el conjunto de los niveles de ejecución en el que se desea que el script activo (por ejemplo,345
si es activo en los niveles de ejecución3
,4
y5
), yA
yB
son las prioridades de inicio y parada. Luegochkconfig --add foo
(suponiendo que su script tenga nombrefoo
) creará los archivos/etc/rc.d/rcN.d/
con los nombres apropiados.A continuación, puede utilizar
service foo bar
para enviar elbar
mensaje a la secuencia de comandos (por ejemplo,start
,stop
, lo que sea - que es donde el$1
viene).fuente
El $ 1 es el argumento de la línea de comando que se pasa a su script, es uno de inicio, detención o reinicio. En openSUSE , no recuerdo tener una opción para pasar otros argumentos al script al usar el editor de nivel de ejecución, así que creo que estos son probablemente los únicos que debería usar.
Yo no uso CentOS , pero parece que el programa controla lo que se inicia en qué nivel de ejecución es ntsysv .
fuente