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


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!


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.


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.


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

¿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.


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.


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


¿Cómo hacer que mi demonio aparezca en la service --status-alllista?
Necktwi
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.