Wie erstelle ich eine JAR-Datei beim Start und beim Abmelden?


30

Ich habe keine Ahnung, wo ich anfangen soll. Ich habe über Dämonen gelesen und das Konzept nicht verstanden.

Mehr Details :

  • Ich habe einen Crawler geschrieben, der niemals stehen bleibt, und Crawler über RSS im Internet.
  • Der Crawler wurde in Java geschrieben - daher ist es gerade ein Glas.
  • Ich bin Administrator auf einem Computer mit Ubuntu 11.04.
  • Es besteht eine gewisse Wahrscheinlichkeit, dass der Computer abstürzt. Daher möchte ich, dass der Crawler bei jedem Start des Computers ausgeführt wird.
  • Außerdem möchte ich, dass es weiter läuft, auch wenn ich mich abgemeldet habe. Ich bin mir nicht sicher, ob dies möglich ist, aber die meiste Zeit bin ich ausgeloggt und ich möchte immer noch, dass es kriecht.

Irgendwelche Ideen? Kann mich jemand in die richtige Richtung weisen?

Nur auf der Suche nach der einfachsten Lösung.

Antworten:


32

Hier ist eine einfache Möglichkeit, dies mit SysVInit zu tun. Anleitung:

  1. Erstellen Sie das Start- und das Stoppskript Ihrer Anwendung. Legen Sie es in ein Verzeichnis, in unserem Beispiel ist:

    • Skript starten: /usr/local/bin/myapp-start.sh
    • Skript stoppen: /usr/local/bin/myapp-stop.sh

    Jeder wird die Anweisungen zum Ausführen / Stoppen der App bereitstellen. Zum Beispiel kann der myapp-start.shInhalt so einfach sein wie der folgende:

    #!/bin/bash
    
    java -jar myapp.jar 

    Für das Stopp-Skript kann es ungefähr so ​​aussehen:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
  2. Erstellen Sie das folgende Skript ( myscript) und setzen Sie es auf /etc/init.d.

    /etc/init.d/myscript Inhalt:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
  3. Stellen Sie das Skript so ein, dass es mit dem System startet (mit SysV). Führen Sie einfach den folgenden Befehl aus ( als root ):

    update-rc.d myscript defaults 

PS: Ich weiß, dass Upstart großartig und bla bla ist, aber ich bevorzuge das alte SysV-Init-System.


1
Aber woher weiß das System, welche Parameter verwendet werden? Wie man einstellt, um der "Start" zu sein. Versuchte hier und es hat nicht funktioniert.
John John Pichler

1
Dies funktioniert, aber der Befehl "service myapp start" beendet den Befehl nicht.
Tobia

Wie verwende ich nun die Optionen start | stop | restart in myscript?
Codevalley

Selbst nachdem ich die 3 Schritte ausgeführt habe, läuft mein Glas beim Start nicht. Sind Sie sicher, ob wir Berechtigungen, Pfad oder ähnliches ändern müssen?
Codevalley

@Codevalley, wie ich bereits erwähnte, ist diese Methode für den SysV-Init. Um den Dienst oder einen anderen Befehl zu verwenden, müssen Sie einen Startjob schreiben. Aber wenn Sie dies tun wollen, sollten Sie ein systemd schreiben (da es zum Standard wird)
Marcos Roriz Junior

6

Ja! Es ist möglich. :) Upstart ist der richtige Weg, um sicherzustellen, dass der Dienst weiterhin ausgeführt wird. Es hat fünf Pakete, die alle standardmäßig installiert sind:

  • Starten Sie den init-Daemon und das initctl-Dienstprogramm neu
  • upstart-logd stellt den Daemon logd und die Jobdefinitionsdatei für den Dienst logd zur Verfügung
  • upstart-compat-sysv stellt Jobdefinitionsdateien für die RC-Tasks und die Tools für Neustart, Runlevel, Herunterfahren und Telinit bereit, die die Kompatibilität mit SysVinit gewährleisten
  • Startup-Tasks stellt Jobdefinitionsdateien für Systemstart-Tasks bereit
  • system-services stellt Jobdefinitionsdateien für tty services bereit

Das Lernen ist sehr unterhaltsam und es lohnt sich. Upstart hat eine Website: http://upstart.ubuntu.com/


Von der Upstart-Website ab 2019: "Das Projekt befindet sich nur
Nav

2

3 schnelle Vorschläge ...

  1. Erstellen Sie einen S - Tarte Skript in /etc/rc3.d(Multi - User - Konsolen - Modus) mit entsprechenden K ill - Skripte in /etc/rc.0und /etc/rc6.dIhr Java - Programm in einer kontrollierten Art und Weise zu töten , wenn das System herunterfährt (runevel 0) oder Neustarts (Runlevel 6) Siehe Einführung in den Runlevels .

    Möglicherweise können Sie Ihre Java-App in Runlevel 2 (rc2.d) starten, aber als Crawler benötigen Sie TCP / IP. Stellen Sie daher sicher, dass Ihr Netzwerkdienst in Runlevel 2 verfügbar ist / gestartet wurde. In Runlevel 3 ist die Vernetzung definitiv aufwärtsgerichtet.

    /etc/init.denthält alle eigentlichen Start / Kill-Skripte. /etc/rcN.dVerzeichnisse enthalten nur Links zu ihnen, denen S oder K vorangestellt sind, um sie zu starten bzw. zu beenden, je nach Runlevel N.

  2. Ein Prozess, der von ausgeführt wird, crondsollte zwischen den Abmeldungen bestehen bleiben. Vielleicht füge es deiner Crontab hinzu.

  3. Ein Prozess, der mit ausgeführt wird, nohupsollte ebenfalls bestehen bleiben. Siehe nohup: Führen Sie einen Befehl auch nach dem Abmelden aus .

    $ nohup java -jar myapp.jar &

    Standardmäßig wird myapp.jardie Standardausgabe in eine Datei mit dem Namen ./nohup.outoder, $HOME/nohup.outwenn diese nicht beschreibbar ist , in eine Datei mit dem Namen .


Und wenn ich mich auslogge, läuft es dann immer noch im Hintergrund?
RanZilber

0

Seien Sie sich auch bewusst, wenn Sie Anwendungen machen mit:

  update-rc.d myscript defaults 

Um die Berechtigungen 0755 zu haben und den Pfad zu verwenden oder vor Ihrem .sh zu erhalten. Angenommen, Ihr Skript befindet sich in /root/test.sh. Sie sollten zuerst auf CD wechseln, /root/bevor Sie darauf zugreifen test.sh.

Der beste Weg ist also, ein SH auf init.d zu erstellen und dort den Pfad zu your zu ändern shund es in der Startfunktion auszuführen.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.