Server starten

Andre267

Erfahrenes Mitglied
Schönen guten Tag,

ich versuche gerade verzweifelt via exec() meinen CSS Server zu starten.
Es funktioniert aber nicht, weil der CSS Server unter einem anderen Benutzer normalerweise
läuft.

Gibt es eine Möglichkeit den Server über meinen Web Benutzer zu starten?

PS: Das ganze läuft auf einem Linux System (Debian).
 
Wie startest du den Server denn normalerweise? Hast du kein Start-/Stop-Script in /etc/init.d dafür? Unter Redhat-kompatiblen Systemen würde ich ein Start-Script so aufrufen:

Bash:
$ service [Service-Name] start
 
Mhhh das wäre auch eine Idee.
Ist der Service Benutzer abhängig (kann nur von bestimmten Benutzern ausgeführt werden?)

PS: Wie beende ich das ganze dann?
Weil der start Befehl soll in einem Screen laufen?
 
Zuletzt bearbeitet:
Also: Normalerweise lässt man Server als Prozesse im Hintergrund werkeln. Das hat den netten Nebeneffekt, das man sie nicht mal einfach so aus Versehen beenden kann, sondern nur explizit über einen Befehl.

Wenn du ein Programm hast, was als Dienst arbeitet (Server = deutsch: Dienst), das sich nicht automatisch von der Kommando-Zeile loslöst (detached), kannst du das Programm beim Starten in den Hintergrund legen und damit ein Loslösen erzwingen. Das macht man so:

Bash:
$ /pfad/zum/programm &

Wichtig ist hier das kaufmännische "Und", damit wird das ausgeführte Kommando von der Befehlszeile in den Hintergrund gelegt (detached) und du kannst auf der Kommandozeile ganz normal weiter arbeiten.

Zweitens: Ein Programm, das Ausgaben auf der Kommando-Zeile ausgibt, hat mindestens 2 Kanäle (Standard-Ausgabe (Kanal 1) und Standard-Error-Ausgabe (Kanal 2) ) um sich bemerkbar zu machen. Wenn du ein Programm als Dienst laufen lassen willst, kannst du diese Kanäle in Log-Dateien umleiten, wenn du das Programm mit & in den Hintergrund legst. Das geht so:

Bash:
$ /pfad/zum/programm 1>/var/log/programmname.stdout.log 2>/var/logprogrammname.stderr.log

Drittens: Wenn du ein Programm unter einen bestimmten Benutzerkontext laufen lassen willst, gibts das Tool "sudo", welches sehr flexibel ist. Das ist eine Abkürzung und steht für "Substitute User and DO" - also ändere den Benutzerkontext und führe aus. Man verwendet es so (angenommen es gibt für das Programm "programm" einen Benutzer, der genauso heißt):

Bash:
$ sudo programm /pfad/zum/programm

Der erste Parameter ist der Benutzername, der zweite ist der absolute Pfad zum Programm.

Finally:
Nun kann man das alles prima kombinieren:

Bash:
$ sudo programm /pfad/zum/programm 1>/var/log/programmname.stdout.log 2>/var/logprogrammname.stderr.log &

Zum sudo-Programm sei noch zu erwähnen, das man die Rechte benötigt, sudo zu verwenden. Nähere Dokumentation findest du in der sudo Manpage.

Wenn du das alles in ein Start-/Stop-Script packst, kannst du das Script in die Runlevel-Verzeichnisse /etc/rc.d/rc[n].d verlinken und dann wird der Dienst beim Starten des Computers mit gestartet, wie alle anderen Dienste, die sich bereits in diesen Verzeichnissen befinden.

Wenn ein Programm im Hintergrund läuft, kann man mittels "kill"-Befehl das Programm beenden lassen. Dazu benötigt man die PID (Prozess-ID) des Dienstes. Es könnte so ablaufen:

Bash:
$ kill -KILL `pidof programm`

Das Tool "pidof" besorgt die Prozess-ID des angegebenen Programmnamens.
 
und genau das mit sudo kann ich nicht machen. :-(
Es ist nicht installiert und lässt sich auch nicht installieren.

Deswegen wird mir nur der Weg mit dem Dienst offen bleiben.
 
Mh, das dachte ich mir schon. Du kannst dich mit su als root anmelden und hast somit sämtliche Rechte, die du brauchst, um solch einen Prozess zu starten. Die Frage ist nur, wie du su das Kennwort von root übergibst. Ich kann das gerade nicht ausprobieren, da es unter Mac OS X kein su sondern nur sudo gibt.
 
Zurück