Inicie tomcat al inicio con privilegios administrativos

23

Necesito ejecutar un proceso antes de iniciar sesión en el sistema. ¿Cómo ejecutarlo como servicios? ¿Cómo hago servicios en Linux?

¿En Ubuntu y Fedora? El servicio es personalizado tomcat

Sajad Bahmani
fuente
66
Cómo se inician los servicios es muy condicional en la distribución de Linux. Díganos qué está tratando de lograr (y en qué distribución y tal vez Desktop Environment), porque en este momento creo que probablemente no esté pensando en el problema correctamente.
xenoterracide

Respuestas:

23

Para ejecutar un servicio sin o antes de iniciar sesión en el sistema (es decir, "en el arranque"), deberá crear un script de inicio y agregarlo a la secuencia de arranque.
Hay tres partes en un script de servicio: iniciar, detener y reiniciar.
La estructura básica de un script de servicio es:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

Una vez que haya ajustado el script a su gusto, simplemente colóquelo en /etc/init.d/
Y agréguelo al proceso de inicio del servicio del sistema (en Fedora, no soy un usuario de Ubuntu,> D):

chkconfig -add <ServiceName>  

El servicio se agregará al proceso de inicio del sistema y no tendrá que volver a iniciarlo manualmente.

¡Aclamaciones!

gusano
fuente
2
Tenga en cuenta que mientras iniciar, detener y reiniciar suelen ser suficientes para secuencias de comandos de inicio simples. Probablemente también desee incluir una acción de 'estado', que es fácil en Debian y otras distribuciones que incluyen status_of_proc () en su paquete init-functions. Los paquetes bien administrados incluirán todas las funciones requeridas por el LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). El script de inicio distribuido con tomcat en Ubuntu contiene todas estas acciones, probablemente apueste a usarlo.
Steven D
19

Dependiendo del sistema de inicio, puede crear una secuencia de comandos de inicio diferente. Fedora le ofrece un sistema de arranque y sistemad para elegir, y, por supuesto, compatibilidad con SysV.

Advenedizo

  • crear archivo de definición de servicio como /etc/init/custom-tomcat.conf
  • poner dentro:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

Y su Tomcat debería comenzar al iniciar el sistema.

Systemd

  • crear definición de servicio en /etc/systemd/system/custom-tomcat.service
  • poner dentro:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

y habilite su servicio usando systemctl enable custom-tomcat.service. Se iniciará cada arranque normal.

Por supuesto, hay pocas opciones de configuración más para ambos sistemas init, puede verificarlas en su documentación.

zdzichu
fuente
7

Tomcat es un servicio bastante común, recomendaría mirar el script de inicio proporcionado por la distribución ya. Lo más probable es que funcione con su binario personalizado, con pocos o ningún ajuste.

xenoterracida
fuente
6

Si tiene un crondemonio, uno de los ganchos de tiempo cron predefinidos es @reboot, que naturalmente se ejecuta cuando se inicia el sistema. Ejecute crontab -epara editar su crontabarchivo y agregue una línea:

@reboot /your/command/here
Michael Mrozek
fuente
¿Esto se aplica a todas las startups o solo se reinicia?
WhyNotHugo
Se aplica SOLAMENTE a fcron, no a vixie-cron o cualquier otro cron AFAIK.
Maciej Piechotka
@Maciej Definitivamente funciona para vixie-cron; eso es lo que uso
Michael Mrozek
@Hugo Todas las nuevas empresas
Michael Mrozek
6

Para simplemente ejecutar un script después de que la computadora se inició pero antes de que un usuario inicie sesión, simplemente puede editar el script /etc/rc.local, que está destinado a resolver exactamente esta tarea.

fschmitt
fuente
3

Puede crear un script más sofisticado, que le permite ejecutar bajo los permisos de un usuario específico, de la siguiente manera:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

El script va en /etc/init.d/myservice, y usted inicia el servicio ejecutando:

/etc/init.d/myservice start

Lea la página de manual en start-stop-daemon para comprender cómo funciona.

Señor ed
fuente
1

En Ubuntu o Debian como puedes usar, para agregar

update-rc.d your_service defaults

para eliminar

update-rc.d -f your_service remove

¡Adiós! \ o

es bueno implementar el estado de las funciones y forzar la recarga para que sea compatible con LSB

MaikoID
fuente
¿Cómo hacer que mi demonio aparezca en la service --status-alllista?
Necktwi