2Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
5697
5697
EMPFEHLEN
-
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
-
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
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...
-
Das sollte eigentlich so funktionieren
Aber wie gesagt, die Pfade müssen passen.Code :1
su deinUser -c screen dmS Serverwrapper java -server -jar gameserverwrapper.jar -autostart
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
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
-
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
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...
-
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ß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
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....

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
-
Beim Cronjob brauchst du nicht extra ein Script zu schreiben. Du kannst da alles ausführen.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
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
-
Wie Batch unter Windows 7 in Autostart kopieren?
Von Masterfire im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 07.02.10, 11:48 -
Konsolenanwendung unter Autostart?
Von mafiamix im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 20.05.07, 08:34 -
Autostart unter Win2k
Von Pilldriver im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 04.01.02, 17:26





Zitieren


Login





