javaprogramm als dämon starten lassen

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von LUZA, 27.12.2006.

  1. #1 LUZA, 27.12.2006
    Zuletzt bearbeitet: 29.12.2006
    LUZA

    LUZA Grünschnabel

    Dabei seit:
    27.12.2006
    Beiträge:
    9
    Zustimmungen:
    0
    [gelöst] javaprogramm als dämon starten lassen

    hey leutz...

    ich hab ein java programm, was einigermassen wie ein dämon aufgebaut ist, d.h. die main startet mit start die run-methode von meiner durch vererbung gebastelten klasse ( extends thread).

    in der run-methode gibts ne endllosschleife, wo auf ports gehört wird.
    das ganze funktioniert auch, wenn ich das programm explizit über konsole starte ( und konsole offen lasse). aber sobald die konsole zu ist ( auch wenn ich die vm als hintergrundprozess gestartet habe mit &), verreckt auch das programm.

    eintrag in boot.local, bei yast im runlevel-editor und mit scripts in init.d und den rcX.d ordner hat auch nicht gefunkt.

    wie kann ich nun dieses programm beim booten als hintergrundprozess starten lasse? muss ich dafür wie bei c irgendwo mit fork oder ähnlichem rumfrickeln oder gehts einfacher?


    mfg und danke schonmal für eventuelle antworten,
    ich
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Zuerstmal muss das Programm so gebaut sein, dass es sich vom Control-TTY löst. Erst dann kann es als Daemon laufen, sonst kann es lediglich im Hintergrund laufen, indem es mit einem &-Zeichen in den Hintergrund geschoben wird. Alternativ startest du das Programm einfach im Screen und schliesst den Screen mit Strg+A Strg+D. Damit läuft das Programm auch weiter, wenn du dich ausloggst.
     
  4. LUZA

    LUZA Grünschnabel

    Dabei seit:
    27.12.2006
    Beiträge:
    9
    Zustimmungen:
    0
    also müsste ich eine wie auch immer geartete fork-like schematik verwenden?
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Jep, und stdout sowie stderr schliessen. In C würde das dann etwa so aussehen:
    Code:
        freopen(LOG_ERR_FILE, "a", stderr);
        setbuf(stderr, NULL);
        freopen(LOG_FILE, "a", stdout);
        setbuf(stdout, NULL);
    #ifdef _POSIX_SOURCE
        setsid();
    #else // !_POSIX_SOURCE
    #ifdef SYSV
        setpgrp(); // der SysV-Weg
    #else // !SYSV
        setpgid(0, getpid()); // der POSIX-Weg
    #endif // SYSV
    #ifdef  TIOCNOTTY
        {
          int fd;
          if ((fd = open("/dev/tty", O_RDWR)) >= 0) {
            ioctl(fd, TIOCNOTTY, (char *) 0);       /* lose controll TTY */
            close(fd);
          }
        }
    #endif // TIOCNOTTY
    #endif // !_POSIX_SOURCE
    
    Wie das mit Java geht, wüsste ich jetzt aber nicht, dazu habe ich zu wenig mit Java zu tun. Obiges Code-Fragment hab ich halt erst kürzlich für einen Dämon gebraucht, denke aber, dass es ähnlich auch in Java umsetzbar sein sollte.
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ich weiss nicht, ob das hier Anwendung findet, aber gibt es nicht eigentlich den Befehl 'nohup', um ein Programm ueber das Beenden der Konsole hinaus am Laufen zu halten?
     
  7. LUZA

    LUZA Grünschnabel

    Dabei seit:
    27.12.2006
    Beiträge:
    9
    Zustimmungen:
    0
    ka, mal angucken...

    ansonsten wirds also doch auf das verhasste fork-gefrickel hinauslaufen. dann kann ich das ganze eigentlich sofort in c schreiben...
     
  8. LUZA

    LUZA Grünschnabel

    Dabei seit:
    27.12.2006
    Beiträge:
    9
    Zustimmungen:
    0
    ich habs jetzt hinbekommen.

    ein eintrag in die boot.local, der ein script startet.
    in dem script wird mit cd das arbeitsverzeichnis auf das verzeichnis gesetzt, wo die datei und somit meine klasse Daemon ist ( die eine main enthält und der dämon ist) und dann mit "nohup java Daemon & disown" der dämon gestartet.

    wichtig war der wechsel mit cd ins verzeichnis, wo der dämon ist, auch wenn das aufrufende script im selben verzeichnis liegt, weils sonst den altbekannten und immer wieder widerlichen NoClassDefFoundError gibt.

    also danke an alle, es geht jetzt!

    mfg, ich
     
  9. #8 whopper, 29.12.2006
    whopper

    whopper Foren As

    Dabei seit:
    01.10.2006
    Beiträge:
    96
    Zustimmungen:
    0
    das nohup ist doch gar nicht wichtig oder?
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. LUZA

    LUZA Grünschnabel

    Dabei seit:
    27.12.2006
    Beiträge:
    9
    Zustimmungen:
    0
    doch, glaub schon... ich habs zwar nicht ohne ausprobiert, aber es sorgt ja dafür, dass sich das programm nicht nur in den hintergrund schiebt, sondern auch sozusagen von der aufrufenden session löst.

    was disown genau macht, weiss ich jetzt garnicht, aber es funktioniert**
     
  12. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Wahrscheinlich garnichts, wenn du nicht gerade die zsh nutzt.
    Code:
    disown [ job ... ]
    job ... &|
    job ... &!
           Remove the specified jobs from the job table; the shell will  no
           longer  report their status, and will not complain if you try to
           exit an interactive shell with them running or stopped.   If  no
           job is specified, disown the current job.
    
           If  the  jobs are currently stopped and the AUTO CONTINUE option
           is not set, a warning is printed  containing  information  about
           how  to make them running after they have been disowned.  If one
           of the latter two forms is used, the jobs will automatically  be
           made  running,  independent  of the setting of the AUTO CONTINUE
           option.
    
     
Thema:

javaprogramm als dämon starten lassen

Die Seite wird geladen...

javaprogramm als dämon starten lassen - Ähnliche Themen

  1. Problem bei ausführen von Javaprogramm in eclipse

    Problem bei ausführen von Javaprogramm in eclipse: hallo ich hab folgendes Problem: Ich bin neu unter debian und möchte dort mit ecllipse programmieren. Ich habe mir mit apt-get eine...
  2. Server & Dämon auf Verfügbarkeit prüfen (heartbeat)

    Server & Dämon auf Verfügbarkeit prüfen (heartbeat): Einleitung In meinem kleinen Netzwerk stehen 2 Server. Zweck: 1. Server: file sharing, 2. Server: Backup des Fileservers & Clients Der...
  3. Programm als Dämon

    Programm als Dämon: Hallo !!! Was muß ich den machen um mein Programm als Dämon laufen zu lassen ? Das Programm soll unabhängig von der Shell sein, damit es...
  4. Gnome-session-dämon

    Gnome-session-dämon: Gnome-settings-dämon Kann jemand von Euch was mit dieser Fehlermeldung anfangen? ---------- Beim Starten des GNOME-Einstellungsdämons ist ein...