Starten Sie tomcat beim Start mit Administratorrechten

23

Ich muss einen Prozess ausführen, bevor ich mich beim System anmelden kann. Wie führe ich es wie Dienste aus? Wie mache ich Dienste in Linux?

In Ubuntu und Fedora? Der Service ist maßgeschneiderte Kater

Sajad Bahmani
quelle
6
Wie Dienste gestartet werden, hängt sehr stark von der Linux-Distribution ab. Bitte teilen Sie uns mit, was Sie erreichen möchten (und auf welcher Distribution und in welcher Desktop-Umgebung), denn ich denke, Sie denken derzeit wahrscheinlich nicht über das richtige Problem nach.
Xenoterracide

Antworten:

23

Um einen Dienst ohne oder vor dem Anmelden am System auszuführen (dh "beim Booten"), müssen Sie ein Startskript erstellen und es der Bootsequenz hinzufügen.
Ein Dienstskript besteht aus drei Teilen: Starten, Stoppen und Neustarten.
Die Grundstruktur eines Service-Skripts lautet:

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

Sobald Sie das Skript nach Ihren Wünschen angepasst haben
, platzieren Sie es einfach in /etc/init.d/. Fügen Sie es dem Systemdienst-Startprozess hinzu (unter Fedora bin ich kein Ubuntu-Benutzer,> D):

chkconfig -add <ServiceName>  

Der Dienst wird dem Systemstartprozess hinzugefügt, und Sie müssen ihn nicht erneut manuell starten.

Prost!

wurmintrudieren
quelle
2
Beachten Sie, dass beim Starten, Stoppen und Neustarten in der Regel einfache Init-Skripte ausreichen. Sie möchten wahrscheinlich auch eine 'status'-Aktion einbinden, was in Debian und anderen Distributionen, die status_of_proc () in ihrem init-functions-Paket enthalten, einfach ist. Gut verwaltete Pakete enthalten alle Funktionen, die vom LSB benötigt werden ( refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/… ). Das mit Tomcat in Ubuntu gelieferte Init-Skript enthält all diese Aktionen.
Steven D
19

Abhängig vom Init-System erstellen Sie das Init-Skript unterschiedlich. Mit Fedora haben Sie die Wahl zwischen Upstart und System und natürlich der SysV-Kompatibilität.

Emporkömmling

  • Servicedefinitionsdatei erstellen als /etc/init/custom-tomcat.conf
  • reintun:

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

Und Ihr Tomcat sollte beim Systemstart starten.

Systemd

  • Servicedefinition erstellen in /etc/systemd/system/custom-tomcat.service
  • reintun:

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

und aktivieren Sie Ihren Dienst mit systemctl enable custom-tomcat.service. Es wird bei jedem normalen Bootvorgang gestartet.

Natürlich gibt es für beide init-Systeme nur noch wenige Konfigurationsmöglichkeiten, diese können Sie in der Dokumentation nachlesen.

zdzichu
quelle
7

Tomcat ist ein ziemlich verbreiteter Dienst, ich würde empfehlen, das von der Distribution bereitgestellte Init-Skript zu lesen. Wahrscheinlich funktioniert es mit Ihrer angepassten Binärdatei, ohne dass es zu Änderungen kommt.

Xenoterracid
quelle
6

Wenn Sie einen cronDaemon haben, ist einer der vordefinierten Cron-Time-Hooks @reboot, der natürlich beim Systemstart ausgeführt wird. Führen crontab -eSie crontabFolgendes aus, um Ihre Datei zu bearbeiten und eine Zeile hinzuzufügen:

@reboot /your/command/here
Michael Mrozek
quelle
Gilt dies für alle Starts oder nur für Neustarts?
WhyNotHugo
Es gilt NUR für fcron - nicht für vixie-cron oder andere cron AFAIK.
Maciej Piechotka
@ Maciej Es funktioniert definitiv für Vixie-Cron; das benutze ich
Michael Mrozek
@ Hugo Alle Startups
Michael Mrozek
6

Um ein Skript einfach auszuführen, nachdem der Computer gestartet wurde, aber bevor sich ein Benutzer anmeldet, können Sie einfach das Skript /etc/rc.local bearbeiten, das genau diese Aufgabe lösen soll.

fschmitt
quelle
3

Sie können ein komplexeres Skript erstellen, mit dem Sie unter den Berechtigungen eines bestimmten Benutzers wie folgt ausführen können:

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

Das Skript befindet sich in /etc/init.d/myservice und Sie starten den Dienst, indem Sie Folgendes ausführen:

/etc/init.d/myservice start

Lesen Sie die Manpage zu start-stop-daemon, um zu verstehen, wie es funktioniert.

Mr Ed
quelle
1

In Ubuntu oder Debian können Sie wie gewohnt hinzufügen

update-rc.d your_service defaults

zu entfernen

update-rc.d -f your_service remove

Tschüss! \O

Es ist schön, die Funktionen status und force -reload zu implementieren, um LSB-kompatibel zu sein

MaikoID
quelle
Wie kann ich meinen Daemon in der service --status-allListe anzeigen lassen ?
Necktwi