tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von zerix
  • 1 Beitrag von zerix
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
5697
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Hallo!

    Ja, ich weiß dieses Thema wurde wahrscheinlich auch hier oft durchgenommen.
    Jedoch konnte ich weder hier noch irgendwo anders eine befriedingende Antwort finden...

    Es geht nämlich um die Frage:

    Wie sorge ich dafür, dass ein bestimmtes Programm bei Systemstart automatisch startet.

    Da ich ein Linux-neuling bin, hab ich mir vor ein paar Monaten einen Homeserver auf meinem alten P4 Rechner aufgesetzt.

    Nach vielen Grundlagen wie zurechtkommen mit der Konsole, Serversicherheit usw., habe ich noch so zu sagen ein allerletztes Problem. Autostart.

    Nach einem Restart muss ich normalerweise folgende Anwendung wie folgt von Hand starten:

    Code :
    1
    2
    
    cd /opt/gameserver/tw1/
    screen dmS Serverwrapper java -server -jar gameserverwrapper.jar -autostart

    Das ganze wird über den User "serverslave" ausgeführt dem die dateien/ordner auch gehören. (nicht root).

    Jetzt habe ich wirklich keine Lösung gefunden diesen Befehl nach Systemstart auszuführen.
    Ich bin nur auf komplizierte Runlevel-geschichten gestoßen, sowie Skripte mit denen ich nichts anfangen konnte.

    Gibt es da nichts einfaches (vielleicht einen netten Commandline-wizard) mit dem man das Problem lösen kann?

    Bei Windows schreib ich einfach ne Batchdatei und schieb diese in den Autostart-ordner.
    Bei Debian hab ich soetwas bis jetzt nicht entdeckt.

    Kann mir jemand eine befriedigende Antwort oder einen Link liefern?
    Ich bin nämlich schon kurz vorm verzweifeln.

    Liebe Grüße,
    Martin
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    naja, viel anderes ist es bei Linux ja auch nicht, aber es ist halt so ne Runlevel-Geschichte, wie du es nennst.

    Du musst halt sagen, bei welchem run-level es gestartet werden soll. Dafür legst du am besten dein Start-Script in den Ordner /etc/init.d und machst einen Sym-Link (Verknüpfung) in das jeweilige runlevel oder je nach dem welche Distribution du hast, gibt es auch Programme die dir dein Script ins angegebene runlevel legen.

    So ein Start-Script ist auch nicht besonders schwer. Es muss halt 2 Optionen enthalten(kann auch mehr):

    start
    stop

    Start, damit es bei Start gestartet wird und stop damit es beim beenden vernünftig beendet wird.
    Dazu gibt es eine case-Anweisung. Das ganze könnte in deinem Fall so aussehen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    #!/bin/bash
    case "$1" in
    start)
    screen dmS Serverwrapper java -server -jar gameserverwrapper.jar -autostart
    #Es müssen nur die Pfade angepasst werden. empfehlenswert wäre eine Anpassung der PATH-Umgebungsvariable
    ;;
    stop)
    #Hier kannst du den Server beenden
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    esac

    Zu den runleveln. Im Ordner /etc gibt es einige Ordner die mit rc beginnen und eine Nummer haben. Jeder rc-Ordner +Nr entspricht dem jeweiligen runlevel. Darin befinden sich alle Links zu den Startscripten die gestartet werden sollen.
    Du müsstest nur das tun was ich oben gesagt habe.

    Debian startet beispielsweise standardmäßig im runlevel 2.

    Gruß

    Sascha
    mccae bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Zitat Zitat von zerix Beitrag anzeigen
    Hallo,

    naja, viel anderes ist es bei Linux ja auch nicht, aber es ist halt so ne Runlevel-Geschichte, wie du es nennst.

    Du musst halt sagen, bei welchem run-level es gestartet werden soll. Dafür legst du am besten dein Start-Script in den Ordner /etc/init.d und machst einen Sym-Link (Verknüpfung) in das jeweilige runlevel oder je nach dem welche Distribution du hast, gibt es auch Programme die dir dein Script ins angegebene runlevel legen.

    So ein Start-Script ist auch nicht besonders schwer. Es muss halt 2 Optionen enthalten(kann auch mehr):

    start
    stop

    Start, damit es bei Start gestartet wird und stop damit es beim beenden vernünftig beendet wird.
    Dazu gibt es eine case-Anweisung. Das ganze könnte in deinem Fall so aussehen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    #!/bin/bash
    case "$1" in
    start)
    screen dmS Serverwrapper java -server -jar gameserverwrapper.jar -autostart
    #Es müssen nur die Pfade angepasst werden. empfehlenswert wäre eine Anpassung der PATH-Umgebungsvariable
    ;;
    stop)
    #Hier kannst du den Server beenden
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    esac

    Zu den runleveln. Im Ordner /etc gibt es einige Ordner die mit rc beginnen und eine Nummer haben. Jeder rc-Ordner +Nr entspricht dem jeweiligen runlevel. Darin befinden sich alle Links zu den Startscripten die gestartet werden sollen.
    Du müsstest nur das tun was ich oben gesagt habe.

    Debian startet beispielsweise standardmäßig im runlevel 2.

    Gruß

    Sascha
    Hm, und wie stelle ich bei deinem Beispiel sicher, dass alles nicht mit root rechten gestartet wird, sondern über einen bereits erstellten user?!

    Jemand hat mir gesagt, dass es einfacher mit einem Cron-job geht. (Was das angeht, kann ich bequem welche mit webmin erstellen - ich kenn mich aber nicht aus :S)
    Das ist auch ein Gebiet in welches ich mich erst vortasten muss...
     

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Das sollte eigentlich so funktionieren
    Code :
    1
    
    su deinUser -c screen dmS Serverwrapper java -server -jar gameserverwrapper.jar -autostart
    Aber wie gesagt, die Pfade müssen passen.

    Mit einem Cronjob sollte es eigentlich nicht funktionieren, da du ja nicht sagen kannst, das bei jedem Systemstart etwas ausgeführt werden soll, sondern an welchem Tag zur welchen Uhrzeit.

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  5. #5
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Zitat Zitat von zerix Beitrag anzeigen
    Mit einem Cronjob sollte es eigentlich nicht funktionieren, da du ja nicht sagen kannst, das bei jedem Systemstart etwas ausgeführt werden soll, sondern an welchem Tag zur welchen Uhrzeit.
    Bei mir schon

    Siehe:
    http://img686.imageshack.us/img686/9774/cron.jpg

    Nur bin ich ratlos was in die Felder "Befehl" und "Eingabe an Befehl" gehört
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Ok, das mit dem Systemstart ist mir neu. Ich hab es bisher nur die Config-Datei im Editor editiert und da kenne ich nur das was ich oben sagte. Ich wüsste jetzt nicht wie man da den Systemstart angibt, aber egal.

    Da ich die Cronjob-Oberfläche von Webmin nicht, aber ich würde mal behaupten, dass in die Zeile Befehl der Befehl kommt und in das andere Feld, die Parameter, die an den Befehl übergeben werden.

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Beim Apache cronjob zum Beispiel steht folgendes unter "Befehl":
    "/etc/cron.daily/apache2"

    Was dieses apache2 im cron.daily genau ist, weiß ich noch nicht da ich die kiste schon wieder heruntergefahren habe...
     

  8. #8
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Wie ich schon sagte, unter Befehl steht der Befehl der ausgeführt werden soll.

    apache2 ist ein WebServer.


    Mal als Beispiel
    Code :
    1
    
    java -jar MeinJar.jar

    Da wäre jetzt java der Befehl und -jar MeinJar.jar wären die Argumente, die an den Befehl/ das Programm übergeben werden.



    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  9. #9
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Zitat Zitat von zerix Beitrag anzeigen
    Wie ich schon sagte, unter Befehl steht der Befehl der ausgeführt werden soll.
    Wie es ausschaut verweist das Apache beispiel auf ein Script. Ich weiß aber nicht ob ich auch eines brauche.

    Code :
    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
    
    #!/bin/sh
     
    # run htcacheclean
     
    set -e
    set -u
     
    [ -e /usr/sbin/htcacheclean ] || exit 0
    [ -e /etc/default/apache2 ]   || exit 0
     
     
    # edit /etc/default/apache2 to change this
    HTCACHECLEAN_MODE=daemon
    HTCACHECLEAN_RUN=auto
    HTCACHECLEAN_SIZE=300M
    HTCACHECLEAN_PATH=/var/cache/apache2/mod_disk_cache
    HTCACHECLEAN_OPTIONS=""
     
    . /etc/default/apache2
     
    [ "$HTCACHECLEAN_MODE" = "cron" ] || exit 0
     
    [ "$HTCACHECLEAN_RUN" = "yes"   ] || 
    ( [ "$HTCACHECLEAN_RUN" = "auto" ] && \
      [ -e /etc/apache2/mods-enabled/disk_cache.load ] )  || exit 0
     
    /usr/sbin/htcacheclean  ${HTCACHECLEAN_OPTIONS} \
                -p${HTCACHECLEAN_PATH}  \
                -l${HTCACHECLEAN_SIZE}

    Ist wie gesagt schwarze Magie...

    Ich weiß jetzt nicht ob ich einfach meinen Befehl reinhaun kann oder ein Skript schreiben muss....

    Zitat Zitat von zerix Beitrag anzeigen
    apache2 ist ein WebServer.


    Das weiß ich natürlich.
    Nur hab ich, als ich den Post geschrieben habe nicht gewusst um was es sich handelt (Executable, script, whatever).

    Grüße,
    Martin
     

  10. #10
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Beim Cronjob brauchst du nicht extra ein Script zu schreiben. Du kannst da alles ausführen.

    Gruß

    Sascha
    mccae bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  11. #11
    Avatar von mccae
    mccae mccae ist offline Senfdazugeber
    Registriert seit
    Dec 2007
    Ort
    Wien
    Beiträge
    226
    Zitat Zitat von zerix Beitrag anzeigen
    Beim Cronjob brauchst du nicht extra ein Script zu schreiben. Du kannst da alles ausführen.

    Gruß

    Sascha
    Da hat sich das ja erledigt, danke!

    edit:

    Jedoch bin ich noch auf ein Problem gestoßen. Wenn ich den Befehl ausführe, dann findet das Programm bestimmte Dateien nicht, da absolute Pfade genutzt werden.

    Normalerweise muss ich ein "cd /opt/gameserver/tw1/" ausführen, und dann den screen mit dem Programm starten.
    Wenn ich das nicht mache, zeigen absolute Pfade immer auf das Ausgangsverzeichnis (In diesem Fall: /home/serverslave/)

    Es ist nicht zufällig möglich einen Directorywechsel in einen einzigen Befehl mit hineinzupacken?!

    edit2:

    Es schein zu klappen wenn man den cd Befehl durch ein Semikolon trennt ";"

    "cd /opt/gameserver/tw1/;screen -dmS 1TW java -server -jar gameserverwrapper.jar -autostart"

    Der Vollständigkeit halber:

    Mit @reboot ist es möglich einen Cronjob bei Systemstart einmal ausführen zu lassen. Dies geht sogar ohne Rootrechte.
    Geändert von mccae (11.12.09 um 23:26 Uhr)
     

Ähnliche Themen

  1. Wie Batch unter Windows 7 in Autostart kopieren?
    Von Masterfire im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 07.02.10, 11:48
  2. Konsolenanwendung unter Autostart?
    Von mafiamix im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 20.05.07, 08:34
  3. Autostart unter Win2k
    Von Pilldriver im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 04.01.02, 17:26