Démarrer Tomcat au démarrage avec des privilèges administratifs


23

J'ai besoin d'un processus avant de me connecter au système. Comment l'exécuter comme des services? comment faire des services sous Linux?

Dans Ubuntu et Fedora? Le service est personnalisé tomcat


6
Le démarrage des services est très conditionnel à la distribution Linux. Veuillez nous dire ce que vous essayez d'accomplir (et sur quelle distribution et peut-être l'environnement de bureau), car en ce moment je pense que vous ne pensez probablement pas au problème correctement.
xenoterracide

Réponses:


23

Pour exécuter un service sans ou avant de vous connecter au système (c'est-à-dire "au démarrage"), vous devrez créer un script de démarrage et l'ajouter à la séquence de démarrage.
Un script de service comprend trois parties: démarrer, arrêter et redémarrer.
La structure de base d'un script de service est la suivante:

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

Une fois que vous avez modifié le script à votre guise, placez-le simplement dans /etc/init.d/
Et ajoutez-le au processus de démarrage du service système (sur Fedora, je ne suis pas un utilisateur Ubuntu,> D):

chkconfig -add <ServiceName>  

Le service sera ajouté au processus de démarrage du système et vous n'aurez pas à le redémarrer manuellement.

À votre santé!


2
Notez que pendant le démarrage, l'arrêt et le redémarrage sont généralement suffisants pour de simples scripts d'initialisation. Vous voudrez probablement aussi inclure une action «status», ce qui est facile dans Debian et d'autres distributions qui incluent status_of_proc () dans son paquet init-functions. Des packages bien gérés incluront toutes les fonctions requises par le LSB ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). Le script init distribué avec tomcat dans Ubuntu contient toutes ces actions, il est probablement parié de simplement l'utiliser.
Steven D

19

Selon le système init, vous créez le script init différemment. Fedora vous donne le choix entre systemstart et systemd, et bien sûr la compatibilité SysV.

Parvenu

  • créer un fichier de définition de service en tant que /etc/init/custom-tomcat.conf
  • mettre dedans:

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

Et votre Tomcat devrait démarrer au démarrage du système.

Systemd

  • créer une définition de service dans /etc/systemd/system/custom-tomcat.service
  • mettre dedans:

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

et activez votre service en utilisant systemctl enable custom-tomcat.service. Il sera lancé à chaque démarrage normal.

Bien sûr, il y a quelques options de configuration supplémentaires pour les deux systèmes init, vous pouvez les vérifier dans leur documentation.


7

Tomcat est un service assez courant, je recommanderais déjà de regarder le script init fourni par la distribution. Les chances sont que cela fonctionne avec votre binaire personnalisé, avec peu ou pas de réglages.


6

Si vous avez un crondémon, l'un des crochets de temps cron prédéfinis est @reboot, qui s'exécute naturellement au démarrage du système. Exécutez crontab -epour modifier votre crontabfichier et ajoutez une ligne:

@reboot /your/command/here

Est-ce que cela s'applique à toutes les startups, ou seulement aux redémarrages?
WhyNotHugo

Cela s'applique UNIQUEMENT à fcron - pas à vixie-cron ou à tout autre cron AFAIK.
Maciej Piechotka

@Maciej Cela fonctionne certainement pour vixie-cron; c'est ce que j'utilise
Michael Mrozek

@Hugo Toutes les startups
Michael Mrozek

6

Pour exécuter simplement un script après le démarrage de l'ordinateur mais avant qu'un utilisateur ne se connecte, vous pouvez simplement modifier le script /etc/rc.local qui est destiné à résoudre exactement cette tâche.


3

Vous pouvez créer un script plus sophistiqué, qui vous permet d'exécuter sous les autorisations d'un utilisateur spécifique, comme suit:

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

Le script va dans /etc/init.d/myservice, et vous démarrez le service en exécutant:

/etc/init.d/myservice start

Lisez la page de manuel sur start-stop-daemon pour comprendre comment cela fonctionne.


1

Dans Ubuntu ou Debian comme vous pouvez utiliser, pour ajouter

update-rc.d your_service defaults

ôter

update-rc.d -f your_service remove

Au revoir! \ o

est agréable à implémenter l'état des fonctions et force-reload pour être LSB-compilant


comment faire apparaître mon démon dans la service --status-allliste?
Necktwi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.