Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfen, ob Java-Programm läuft

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen, ob Java-Programm läuft

    Hab auf meinem Server ein Java-Programm erstellt, was über ein Webinterface gesteuert wird. Starten des Programms läuft über exec, commands wie stop werden via socket an das Programm gesendet.

    Nun die eigentliche Frage: Wie kann ich überprüfen, ob das Java-Programm bereits läuft? Das Java-Programm soll nämlich nicht mehrfach laufen und auch soll nicht versucht werden, einen command an das Programm zu senden, wenn dieses gar nicht läuft.

  • #2
    Was ist das für ein Server?

    Linux: ps

    Kommentar


    • #3
      In den meißten fällen (in Control-Bash-Dateien z.B.) wird die ProzessID beim start in einer Datei gespeichert. Beim testen kannst du dann 1. prüfen ob die Datei existiert und 2. ob ein Prozess unter dieser ID läuft.
      [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

      Kommentar


      • #4
        Zitat von Gummy Beitrag anzeigen
        Starten des Programms läuft über exec, commands wie stop werden via socket an das Programm gesendet.
        abgesehen von dem üblichen .pid dateien im /tmp oder sonstwo gilt:

        Es lässt sich kein prgramm starten, das an einem, port oder socket lauscht, auf dem schon ein anderes lauscht (so denke ich mal).
        Mann kann zwar über den oben genannten kommunikationskanal daten oder commandos senden, wie man lustig ist, aber wenn der server (dein java programm) entweder tot, oder nicht gestartet ist, kann man keinen erfolgreichen handschacke aufbauen.

        Kommentar


        • #5
          Zitat von rkr Beitrag anzeigen
          Was ist das für ein Server?

          Linux: ps
          Der Webserver ist ein Linux-Server, lokal läuft Apache über XAMPP auf Windows 7.

          Zitat von moma Beitrag anzeigen
          [...] aber wenn der server (dein java programm) entweder tot, oder nicht gestartet ist, kann man keinen erfolgreichen handschacke aufbauen.
          Wenn PHP keine Verbindung (socket_connect() ) aufbauen kann, könnte ich dann davon ausgehen, dass mein Java-Programm nicht mehr läuft und es daraufhin starten?
          Wenn mein Java-Programm keinen Socket öffnen kann oder es aus einem anderen Grund einen Fehler gibt, schreibt es eine Log-Nachricht und wird dann beendet. Es sollte also nur dann laufen, wenn der Server funktioniert.

          Kommentar


          • #6
            Eine simple und sichere Sache ist ein Watchdog auf Dateibasis. Das zu überwachende Programm schreibt regelmäßig den aktuellen Zeitstempel des Systems in eine Datei. Der Wächter liest die Datei und kontrolliert das Alter des Zeitstempels.

            Kommentar


            • #7
              Zitat von Gummy Beitrag anzeigen
              Wenn PHP keine Verbindung (socket_connect() ) aufbauen kann, könnte ich dann davon ausgehen, dass mein Java-Programm nicht mehr läuft und es daraufhin starten?
              oder es hängt irgendwo ein zombie rum, der den port blockiert, aber kein ´handschake aufbauen kann, oder die firewall blockt; also ja.

              Zitat von Gummy Beitrag anzeigen
              Wenn mein Java-Programm keinen Socket öffnen kann oder es aus einem anderen Grund einen Fehler gibt, schreibt es eine Log-Nachricht und wird dann beendet. Es sollte also nur dann laufen, wenn der Server funktioniert.
              hm, macht ein user den port auf, kann dein javaprogrmm nicht sattren, schreibt es eine log nachricht und dann?
              ich dachte das javaprogramm ist der server.

              @jspit
              haste recht, zu nem vernünftigen daemon, gehört sowas; um dem TE allerdings schnelle erfolge zu ermöglichen, es gibt doch neu neuauflage von:
              http://cr.yp.to/daemontools/supervise.html
              @all:
              hat da jemand nen link?

              Kommentar


              • #8
                Watchdog ist eine Möglichkeit.

                Wenn von Außen klar werden soll, ob der Prozess läuft, dann ist ps die direkteste Variante. Wenn gewünscht ist, dass ein Programm nicht mehr als ein mal laufen soll, dann kann man mit Filelocking arbeiten. Funktioniert ohne Anpassungen BS-übergreifend.

                Kommentar


                • #9
                  wie soll ein programm, das an einer ip und einem port lauscht, zweimal laufen?

                  Kommentar


                  • #10
                    Hast du denn gar keine Phantasie?

                    Kommentar


                    • #11
                      nein.
                      leider.
                      sagen meine freunde auch.

                      Kommentar


                      • #12
                        Zitat von Gummy Beitrag anzeigen
                        commands [...] werden via socket an das Programm gesendet.
                        TCP oder UDP Sockets?
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Zitat von moma Beitrag anzeigen
                          wie soll ein programm, das an einer ip und einem port lauscht, zweimal laufen?
                          SO_REUSEPORT
                          Dazu eine schöne Erklärung unter http://stackoverflow.com/questions/1...do-they-mean-t

                          Kommentar


                          • #14
                            Zitat von Blar Beitrag anzeigen
                            SO_REUSEPORT
                            Dazu eine schöne Erklärung unter http://stackoverflow.com/questions/1...do-they-mean-t
                            thanks, kannte ich so nicht (+1 selbstredend).

                            hab ja auch nur nen 3.2 am start.
                            ich weiss, 3.15.1, mach nen gentoo die tage
                            ob das bei dem xselben programm sinn macht, ob der TE das so flüssig beherrscht oder da nicht lieber ne IOExeption geworfen werden sollte?

                            den stackoverflow link werd ich die tage jedenfalls mal genauere studieren.

                            Kommentar


                            • #15
                              Zitat von Blar Beitrag anzeigen
                              SO_REUSEPORT
                              Dazu eine schöne Erklärung unter http://stackoverflow.com/questions/1...do-they-mean-t
                              Danke für den Link - obwohl mir nicht klar ist, was es bringt, doppelt an einem Port zu lauschen...
                              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                              Kommentar

                              Lädt...
                              X