Ejecute un archivo sh al iniciar la máquina

Ejecute un archivo sh al iniciar la máquina

Soy bastante nuevo en Linux y quiero saber qué hacer para iniciar un archivo .sh al iniciar la máquina. Básicamente, tengo una máquina servidor con sistema operativo Linux y quiero ejecutar alguna aplicación jboss cuando el sistema se reinicia o falla.

Agregué S99jBossServersen rc2.d con un enlace /etc/rc.d/init.d/jBossServers.shy le di permiso total (777) parajBossServers.sh

el contenido jBossServers.shes el siguiente

#!/bin/sh
#
# chkconfig: 2345 80 30 
# description: 
#

RETVAL=0

start () {
    /root/batch/startSikkimCA.sh
    /root/batch/startSikkimSp.sh
}

stop () {
    /root/batch/stopSikkimCA.sh
    /root/batch/stopSikkimSp.sh
    RETVAL=$?
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        start
        ;;
    *)
        start
;;
        RETVAL=$?
esac
exit $RETVAL

No estoy seguro de si es correcto o no, pero las 2 rutas mencionadas en

iniciar() y detener()

son correctos, pero aún así la aplicación no se inicia al reiniciar la máquina.

Respuesta1

Mira aen esoque es el iniciador de proceso tradicional y ejecuta scripts en /etc/init.d, /etc/rc1.d, etc. y /etc/rc.local, que probablemente sea la ubicación que desea.

Algunas distribuciones utilizanadvenedizoen su lugar, si es así, consulte los documentos para ello.

En cualquier caso, las rutas exactas pueden variar según la distribución, pero esto debería ser suficiente para comenzar.

Respuesta2

Intente comprobar si sus scripts se están iniciando (por ejemplo, pero introduciéndolos touch /var/tmp/startup.script). ¿Están todos los comandos de sus scripts en el parche de búsqueda durante el arranque?

El nivel de ejecución 2 me parece inusual. 3 debería ser normal para un Linux sin GUI. ¿Qué distribución y versión estás usando?

Respuesta3

En /etc/inittabbusque una línea como id:3:initdefault:. El número probablemente será 3 o 5, pero podría ser 2 o 4. El número en esa línea es el nivel de ejecución predeterminado. Lo más probable es que no sea 2, por lo que los scripts en rc2.d no se ejecutarán.

Coloque su secuencia de comandos en el directorio rcN.d que coincida con el número de la initdefaultlínea.

En principio, rc.local es una mejor opción, pero rc.local varía tanto de una distribución a otra (a veces es un directorio, a veces es un script, a veces no está configurado en absoluto) que sin conocer su distribución es más fácil simplemente ¿Lo has puesto en el nivel de ejecución correcto? Puede intentar man rc.localver qué dice eso en su sistema. Si su sistema admite rc.local como directorio, coloque su script allí y no se preocupe por los niveles de ejecución.

Además, asegúrese de que su script sea propiedad de root y tenga permisos 755 (si desea que alguien pueda ejecutarlo) o 744.

Respuesta4

Agregar un script de inicio

Este método funciona con Red Hat, Fedora, Ubuntu (instale el paquete chkconfig y el servicio), Suse.

Debes copiar tu script en /etc/init.d (es el directorio adecuado o un enlace al directorio adecuado para que funcione igual)

sudo cp jBossServers.sh /etc/init.d/
sudo chmod 0755 /etc/init.d/jBossServers.sh

Luego debe agregarlo al proceso de inicio del sistema. En lugar de crear todos los enlaces necesarios, utilice chkconfig (instale el paquete primero en Ubuntu)

sudo chkconfig add jBossServers.sh

Ahora, al leer el script que encabeza este script, ya se tiene la información para chkconfig con respecto a los niveles de ejecución y la prioridad. Entonces estás bien. La próxima vez que reinicie se iniciará JBoos.

Pero podrías intentar empezar ahora mismo.

sudo service jBossServers.sh start

Nota: si su sistema se queja de que no encuentra chkconfig o servicio, intente llamarlo con /sbin/ antes. Ejemplo

sudo /sbin/chkconfig add jBossServers.sh
sudo /sbin/service jBossServers.sh start

información relacionada