Wie lässt man eine JAR-Datei beim Start und beim Abmelden ausführen?

Wie lässt man eine JAR-Datei beim Start und beim Abmelden ausführen?

Ich weiß nicht, wo ich mit der Suche anfangen soll. Ich habe über Daemons gelesen und das Konzept nicht verstanden.

Mehr Details :

  • Ich habe einen Crawler geschrieben, der nie anhält und im Internet nach RSS crawlt.
  • Der Crawler wurde in Java geschrieben, daher handelt es sich derzeit um ein Jar.
  • Ich bin Administrator auf einem Rechner mit Ubuntu 11.04.
  • Es besteht eine gewisse Wahrscheinlichkeit, dass die Maschine abstürzt, daher möchte ich, dass der Crawler bei jedem Start der Maschine ausgeführt wird.
  • Außerdem möchte ich, dass es weiterläuft, auch wenn ich mich abgemeldet habe. Ich bin nicht sicher, ob das möglich ist, aber die meiste Zeit bin ich abgemeldet und möchte trotzdem, dass es crawlt.

Irgendwelche Ideen? Kann mir jemand den richtigen Weg weisen?

Ich suche nur nach der einfachsten Lösung.

Antwort1

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

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

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

    Jeder enthält Anweisungen zum Ausführen/Stoppen der App. Der myapp-start.shInhalt kann beispielsweise so einfach sein wie der folgende:

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

    Für das Stoppskript kann es etwa 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 fügen Sie es ein /etc/init.d.

    /etc/init.d/myscriptInhalt:

    #!/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. Setzen 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 ist und bla bla, aber ich bevorzuge das alte SysV-Init-System.

Antwort2

Ja, es ist möglich. :)Emporkömmlingist die beste Lösung, um sicherzustellen, dass der Dienst weiterhin ausgeführt wird. Es gibt fünf Pakete, die alle standardmäßig installiert sind:

  • Upstart-Init-Daemon und Initctl-Dienstprogramm
  • upstart-logd stellt den Logd-Daemon und die Jobdefinitionsdatei für den Logd-Dienst bereit
  • upstart-compat-sysv stellt Jobdefinitionsdateien für die RC-Aufgaben und die Tools „reboot“, „runlevel“, „shutdown“ und „telinit“ bereit, die Kompatibilität mit SysVinit gewährleisten.
  • startup-tasks stellt Jobdefinitionsdateien für Systemstartaufgaben bereit
  • system-services stellt Jobdefinitionsdateien für TTY-Dienste bereit

Das Lernen macht sehr viel Spaß und lohnt sich. Upstart hat eine Website:http://upstart.ubuntu.com/

Antwort3

3 schnelle Vorschläge ...

  1. Ein ... kreierenStart Skript im /etc/rc3.d(Multiuser-Konsolenmodus) mit entsprechendenKill-Skripte einbinden /etc/rc.0und /etc/rc6.dIhr Java-Programm kontrolliert beenden, wenn das System herunterfährt (Runlevel 0) oder neu startet (Runlevel 6). SieheEine Einführung in Runlevels.

    Sie können Ihre Java-App möglicherweise in Runlevel 2 (rc2.d) starten, aber als Crawler benötigt sie TCP/IP. Stellen Sie also vorher sicher, dass Ihr Netzwerkdienst in Ihrem Runlevel 2 verfügbar/gestartet ist. Das Netzwerk ist in Runlevel 3 definitiv aktiviert.

    /etc/init.denthält alle eigentlichen Start-/Kill-Skripte. /etc/rcN.dVerzeichnisse enthalten lediglich Links zu ihnen, mit dem Präfix S oder K, um sie pro Runlevel N jeweils zu starten oder zu beenden.

  2. Ein von ausgeführter Prozess crondsollte zwischen den Abmeldungen bestehen bleiben. Fügen Sie ihn möglicherweise zu Ihrer Crontab hinzu.

  3. Ein mit ausgeführter Prozess nohupsollte ebenfalls bestehen bleiben. Siehenohup: Führen Sie einen Befehl aus, auch nachdem Sie sich abgemeldet haben.

    $ nohup java -jar myapp.jar &
    

    Standardmäßig myapp.jarwird die Standardausgabe von in eine Datei mit dem Namen gesendet ./nohup.out, oder $HOME/nohup.outwenn erstere nicht beschreibbar ist.

Antwort4

Einfache Startskripte mit Java-Versionsprüfung für LinuxAuthentifizierungsagent und Windowsauth-agent.bat

verwandte Informationen