Autostart unter Debian...

mccae

Senfdazugeber
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:
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:
#!/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
 
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:
#!/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...
 
Das sollte eigentlich so funktionieren
Code:
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
 
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
 
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:
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
 
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:
#!/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....

apache2 ist ein WebServer.

:rolleyes:

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
 

Neue Beiträge

Zurück