Avviare tomcat all'avvio con privilegi di amministratore


23

Ho bisogno di eseguire un processo prima di accedere al sistema. Come eseguirlo come servizi? come faccio a fornire servizi in Linux?

In Ubuntu e Fedora? Il servizio è tomcat personalizzato


6
Il modo in cui i servizi si avviano è molto subordinato alla distribuzione Linux. Per favore, dicci cosa stai cercando di realizzare (e su quale distro e forse Desktop Environment), perché in questo momento penso che probabilmente non stai pensando al problema nel modo giusto.
xenoterracide,

Risposte:


23

Per eseguire un servizio senza o prima di accedere al sistema (ad esempio "all'avvio"), sarà necessario creare uno script di avvio e aggiungerlo alla sequenza di avvio.
Lo script di servizio contiene tre parti: avvio, arresto e riavvio.
La struttura di base di uno script di servizio è:

#!/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 volta modificato lo script a proprio piacimento, basta inserirlo in /etc/init.d/
E, aggiungerlo al processo di avvio del servizio di sistema (su Fedora, non sono un utente Ubuntu,> D):

chkconfig -add <ServiceName>  

Il servizio verrà aggiunto al processo di avvio del sistema e non sarà necessario riavviarlo manualmente.

Saluti!


2
Si noti che mentre start, stop e restart sono generalmente sufficienti per semplici script init. Probabilmente vuoi anche includere un'azione 'status', che è facile in Debian e in altre distro che includono status_of_proc () nel suo pacchetto init-funzioni. I pacchetti ben gestiti includeranno tutte le funzioni richieste da LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). Lo script di init distribuito con Tomcat in Ubuntu contiene tutte queste azioni, probabilmente è giusto usarlo.
Steven D,

19

A seconda del sistema init, crei lo script init in modo diverso. Fedora ti offre upstart e systemd tra cui scegliere, e ovviamente compatibilità SysV.

parvenu

  • creare il file di definizione del servizio come /etc/init/custom-tomcat.conf
  • metti dentro:

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

E Tomcat dovrebbe avviarsi all'avvio del sistema.

systemd

  • creare la definizione del servizio in /etc/systemd/system/custom-tomcat.service
  • metti dentro:

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

e abilita il tuo servizio utilizzando systemctl enable custom-tomcat.service. Verrà avviato ogni avvio normale.

Naturalmente ci sono alcune altre opzioni di configurazione per entrambi i sistemi init, puoi verificarli nella loro documentazione.


7

Tomcat è un servizio abbastanza comune, ti consiglio di guardare già lo script di init fornito dalla distribuzione. È probabile che funzioni con il tuo binario personalizzato, con poca o nessuna modifica.


6

Se hai un crondemone, uno degli hook cron time predefiniti è @reboot, che viene eseguito naturalmente all'avvio del sistema. Esegui crontab -eper modificare il tuo crontabfile e aggiungi una riga:

@reboot /your/command/here

Questo vale per tutte le startup o solo per i riavvii?
WhyNotHugo,

Si applica SOLO a fcron - non vixie-cron o qualsiasi altro cron AFAIK.
Maciej Piechotka,

@Maciej Funziona sicuramente per vixie-cron; questo è quello che uso
Michael Mrozek

@Hugo Tutte le startup
Michael Mrozek

6

Per eseguire semplicemente uno script dopo l'avvio del computer ma prima che un utente acceda, puoi semplicemente modificare lo script /etc/rc.local che ha lo scopo di risolvere esattamente questo compito.


3

È possibile creare uno script più sofisticato, che consente di eseguire con le autorizzazioni di un utente specifico, come segue:

#!/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

Lo script va in /etc/init.d/myservice e si avvia il servizio eseguendo:

/etc/init.d/myservice start

Leggi la pagina man su start-stop-daemon per capire come funziona.


1

In Ubuntu o Debian come puoi usare, per aggiungere

update-rc.d your_service defaults

rimuovere

update-rc.d -f your_service remove

Ciao! \ o

è bello implementare lo stato delle funzioni e ricaricare forzatamente come compilatore LSB


come far apparire il mio demone service --status-allnell'elenco?
Necktwi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.