Thema geschlossen
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Programm im Runlevel 3 und 5 starten

  1. #1
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard Programm im Runlevel 3 und 5 starten

    Hallo zusammen,

    also ich habe folgendes Problem:
    Ich habe mir ein Java-Programm geschrieben, was alle 10 min etwas
    für mich erledigt.
    Das Programm wollte ich immer beim Systemstart starten, wenn
    das System in den Runlevel 3 oder 5 hochfährt.
    Also habe ich ein shell skript geschrieben, welches ich in das verzeichnis
    /etc/init.d/ gepackt habe.

    Hier erstmal das Skript:

    Code:
    #! /bin/sh
    # /etc/init.d/ipshare
    #
    # description: speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### BEGIN INIT INFO
    # Provides:          ipshare
    # Required-Start:
    # Required-Stop:
    # Default-Start:           5
    # Default-Stop:
    # X-UnitedLinux-Default-Enabled: yes
    # Description:       speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### END INIT INFO
    
    . /etc/rc.status
    
    rc_reset
    
    
    case "$1" in
      start|b)
    	echo -n "Startet IPShare"
    	cd /home/Tux/Documents/Fritz
    	java Fritz
    	;;
      status)
    	echo "$0: status OK"
    	;;
      stop)
    	;;
      *)
    	echo "Usage: $0 start"
    	exit 1
    esac
    rc_exit
    Danach bin ich im Yast auf den Leveleditor gegangen, um das Skript
    für Runlevel 3 und 5 zu aktivieren. Um es zu testen bin ich auf Dienst starten gegangen und das Dialogfenster mit dem Inhalt:"Startet ipshare" bleibt für eine ewigkeit offen.
    Ich denke das das Skript das Java-programm aufruft, welches ja eine ewigkeit läuft und dadurch das Skript nicht beendet wird. Es bleibt sozusagen immer an der Stelle "java Fritz" stehen, bis ich das Java-Programm beende.

    Was kann ich machen, das das Skript mein Programm aufruft und dann weiter durchläuft?

  2. #2
    Administrator Avatar von Rain_Maker
    Registriert seit
    06.02.2006
    Beiträge
    5,459

    Standard AW: Programm im Runlevel 3 und 5 starten

    Code:
    cd /home/Tux/Documents/Fritz
            java Fritz
    hier *könnte* der Fehler liegen, da java wahrscheinlich das Paket nicht findet. Heisst das Java-Programm "Fritz"? oder "Fritz.jar"?

    Ist es ein .jar-File?

    Wie wäre stattdessen
    Code:
    java -jar /vollständiger_Pfad_zum_Executable/Name_des_Executable
    Das wäre dann auch nur eine Zeile Code statt zwei.

    Greetz,

    RM
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE 11.4 - 3.3.X-desktop - fluxbox 1.3.2

    For Windows-Problems - Reboot / For Linux-Problems - BE ROOT!
    (==> Und hier das wirkliche "Geheimnis meines Erfolges")

  3. #3
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard AW: Programm im Runlevel 3 und 5 starten

    ne da liegt nicht der fehler.
    Mein java Programm heißt schon Fritz.class
    also mit "java Fritz" starten
    wenn ich so in die shell eingebe startet es ja auch das programm.
    Es muss etwas damit zu tun haben, dass das Programm unendlich durchläuft und das skript nicht beendet wird.

  4. #4
    Administrator Avatar von Rain_Maker
    Registriert seit
    06.02.2006
    Beiträge
    5,459

    Standard AW: Programm im Runlevel 3 und 5 starten

    Ich weiß nicht, wie es bei Runlevelscripten genau ist, aber ich habe mir gerade ein paar angesehen und dabei ist mir etwas aufgefallen, was ich auch von cronjobs her kenne.

    Programme werden immer mit dem vollständigen Pfad aufgerufen, also versuche mal statt
    Code:
    java
    den Aufruf mit vollständigem Pfad:

    Code:
    /usr/bin/java
    Ausserdem kannst Du noch versuchen (nur so ne Idee) ein & an den Befehl anzuhängen. Du solltest zudem immer prüfen, ob durch das Script überhaupt "java" gestartet wird (top, ps), aus Deiner Beschreibung geht das für mich nicht eindeutig hervor.

    Ob vielleicht Fehler in der Syntax des Scripts vorhanden sind, kann ich Dir nicht sagen, dazu habe ich (noch) zu wenig Erfahrung mit BASH-scripting.

    Greetz,

    RM
    "Programming today is a race between software engineers striving to build better & bigger idiot-proof programs and the Universe trying to produce bigger & better idiots. So far, the Universe is winning." (Rick Cook)

    Dies ist ein _öffentliches_ Supportforum, keinerlei Support per PN, EMail oder Instant Messenger.

    openSUSE 11.4 - 3.3.X-desktop - fluxbox 1.3.2

    For Windows-Problems - Reboot / For Linux-Problems - BE ROOT!
    (==> Und hier das wirkliche "Geheimnis meines Erfolges")

  5. #5
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard AW: Programm im Runlevel 3 und 5 starten

    ja waren gute Tips, jedoch ist es das selbe Problem wie vorher.
    Und ich hab java in top gefunden.
    Naja wenn irgendeiner noch ne idee hat bitte posten.
    Ich werde jetzt erst einmal als vorübergehende Lösung
    das skript ins verzeichnis /home/Tux/.kde/Autostart hauen.
    So klappt es wenigestens, wenn ich mich beim kde einlogge.

  6. #6
    Lehrling
    Registriert seit
    08.08.2006
    Beiträge
    226

    Standard AW: Programm im Runlevel 3 und 5 starten

    1. (wie RM schon erwähnt hat) Absolute Pfade verwenden.

    2. Welche Voraussetzungen sollten denn für dein Programm erfüllt sein?
    D.h. welche Dienste sollten vorher gestartet werden?
    Momentan ist dein Script das erste in der Startabfolge (und das funktioniert mit Sicherheit nicht).
    Also mal Required-Start anpassen.
    Z.B.:
    Code:
    # Required-Start:    $local_fs $remote_fs $network
    [edit]
    Für das Starten in Runlevel 3 und 5 solltest du zusätzlich noch Default-Start anpassen:
    Code:
    # Default-Start:     3 5
    Btw: funktioniert das Script eigentlich wenn du es nach dem Start manuell ausführst?
    Code:
    /etc/init.d/ipshare start
    Gruß b3ll3roph0n
    --
    Denken hilft !

    Für alle meine Beiträge gelten, außer bei Zitaten, die Creative Commons.

  7. #7
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard AW: Programm im Runlevel 3 und 5 starten

    Also ich eure Tips mal befolgt.

    Die erste gute Nachricht ist, dass der Rechner das Skript beim starten erfolgreich startet.
    Ich hab jedoch noch ne Frage. Müssen die Skripte durchlaufen?
    Also ich hab das Skript nach dem start mal manuell ausgeführt.
    Resultat:

    Es startet meine java Anwendung und bleibt dann stehen, bis die java Anwendung beendet wurde, danach läuft es weiter durch. Ich will aber natürlich meine anwendung nicht beenden. Dadurch bleibt das dialogfenster von yast natürlich auch so lange stehen, bis die anwendung beendet wurde.
    Kann man das nicht umgehen?

  8. #8
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard AW: Programm im Runlevel 3 und 5 starten

    So habs jetzt definitv raus:

    Code:
    #! /bin/sh
    # /etc/init.d/ipshare
    #
    # description: speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### BEGIN INIT INFO
    # Provides:          ipshare
    # Required-Start: $network
    # Required-Stop:
    # Default-Start:  3 5
    # Default-Stop:
    # X-UnitedLinux-Default-Enabled: yes
    # Description:       speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### END INIT INFO
    
    . /etc/rc.status
    
    rc_reset
    
    
    case "$1" in
      start|b)
    	echo -n "Startet IPShare"
    	cd /home/Tux/Documents/Fritz
    	nohup /usr/java/jdk1.5.0_05/bin/java Fritz </dev/null >>myLogFile 2>>myErrorFile&
    	;;
      status)
    	echo "$0: status OK"
    	;;
      stop)
    	;;
      *)
    	echo "Usage: $0 start"
    	exit 1
    esac
    rc_exit
    hauptmerk ist auf die zeile
    Code:
    nohup /usr/java/jdk1.5.0_05/bin/java Fritz </dev/null >>myLogFile2>>myErrorFile&
    zu legen

    Dort wird mein programm in einem Daemon-Modus gestartet, der zusätzlich von der shell gelöst wird und die pipes werden nach </dev/null umgeleitet.

  9. #9
    Lehrling
    Registriert seit
    08.08.2006
    Beiträge
    226

    Standard AW: Programm im Runlevel 3 und 5 starten

    Code:
    nohup /usr/java/jdk1.5.0_05/bin/java Fritz </dev/null >>myLogFile2>>myErrorFile&
    Das ist ja mal eine kontruktion.
    Bist du dir Sicher, dass es </dev/null heißen muss?
    Du willst doch die Ausgabe deines Scriptes nach /dev/null leiten, nicht umgekehrt (also /dev/null als Eingabe für dein Script?).
    Bsp.:
    Vergleich mal
    Code:
    cat < ./textdatei
    und
    Code:
    cat ./textdatei > ./textdatei2
    (./textdatei natürlich vorher anlegen und mit Text füllen )

    Müsste die Umleitung für die Fehlerausgabe nicht 2&> heißen?
    Außerdem solltest du 1. die Pfade für die Logfiles angeben und 2. auch sicherstellen, dass diese in regelmäßigen Abständen geleert werden.
    (z.B.: /var/log/ipshare und logrotate entsprechend konfigurieren )

    Last but not least:
    Um ein Startscript als Daemon laufen zu lassen bietet sich start-stop-daemon an:
    Z.B.:
    Code:
    PIDFILE=/var/run/java_fritz.pid
    DAEMON="/usr/java/jdk1.5.0_05/bin/java /home/Tux/Documents/Fritz/Fritz"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
    Mal das Beispielscript /etc/init.d/skeleton und die Man-Page (man start-stop-daemon) anschauen.

    Viel Spass!
    Gruß b3ll3roph0n
    --
    Denken hilft !

    Für alle meine Beiträge gelten, außer bei Zitaten, die Creative Commons.

  10. #10
    Lehrling
    Registriert seit
    24.07.2006
    Beiträge
    26

    Standard AW: Programm im Runlevel 3 und 5 starten

    Zitat Zitat von roskas Beitrag anzeigen
    So habs jetzt definitv raus:

    Code:
    #! /bin/sh
    # /etc/init.d/ipshare
    #
    # description: speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### BEGIN INIT INFO
    # Provides:          ipshare
    # Required-Start: $network
    # Required-Stop:
    # Default-Start:  3 5
    # Default-Stop:
    # X-UnitedLinux-Default-Enabled: yes
    # Description:       speichert IP-Adresse der Fritz!Box auf einem Webserver
    ### END INIT INFO
    
    . /etc/rc.status
    
    rc_reset
    
    
    case "$1" in
      start|b)
    	echo -n "Startet IPShare"
    	cd /home/Tux/Documents/Fritz
    	nohup /usr/java/jdk1.5.0_05/bin/java Fritz </dev/null >>myLogFile 2>>myErrorFile&
    	;;
      status)
    	echo "$0: status OK"
    	;;
      stop)
    	;;
      *)
    	echo "Usage: $0 start"
    	exit 1
    esac
    rc_exit
    hauptmerk ist auf die zeile
    Code:
    nohup /usr/java/jdk1.5.0_05/bin/java Fritz </dev/null >>myLogFile2>>myErrorFile&
    zu legen

    Dort wird mein programm in einem Daemon-Modus gestartet, der zusätzlich von der shell gelöst wird und die pipes werden nach </dev/null umgeleitet.
    EDIT: Hab die Zeile so im Netz gefunden, ist jedoch komisch, dass </dev/null reingeleitet wird, ich habs mal andersrum probiert und da funktionierts auch. Scheint wohl egal zu sein.
    Mit dem Errorstream kenn ich das mit 2> datei.txt. Hab ich aus video2brain suse linux 10.1
    Danke für den Tipp mit start-stop-daemon, werd ich mir mal angucken.

Thema geschlossen
Seite 1 von 2 1 2 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87