.sh Datei ausführen lassen

michi119

New Member
Moin,
ich möchte folgendes script
Code:
#!/bin/sh

#KILL THE SERVER
killall screen

#CD to LFS-Dir
cd /home/lfs/lfs
#Start Server in Screen
screen -S "LFS" wineconsole --backend=curses LFS.exe /cfg=setup.cfg

mittels einem Aufruf einer php-datei ausführen lassen. Das Problem: Es tut sich nichts, außer dem echo, nach aufruf der Datei.
PHP-Code:
PHP:
<?
$return = exec("/var/www/the-hellhounds.net/serverrestart.sh");

echo "Server is getting restarted";

?>
 
www-data hat kein Terminal und kann entsprechend kein screen benutzen.
Alternativ nohup nehmen oder ein Cronjob anlegen und ueber xinetd anstossen :)
(Da relativ oft gefragt wird wie man vom Webspace aus ohne komplexe Teile wie php-ssh oder direkten su-Rechten Kommandus auf dem Server ausfuehrt werde ich in den naechsten Tagen ein entsprechendes Howto posten)
 
Das mit dem Cronjob verstehe ich nicht wirklich :-D genauso wie was du mit nohup meinst :-S Werde das Howto auf jeden fall lesen :-D
 
Um zu erklaeren was ich meine, hier ein erster Schnippsel des angefangenen Howto's:
(Zugegebenermassen noch etwas roh, aber ich denke man sollte die Grundidee verstehen)

Voraussetzung:

Linux-basierender Rechner (Server, vServer, ...)
http://www.xinetd.org/ installiert

MySQL-Datenbank
(mit Remote-Zugriff bei Steuerung entfernter Machinen)

iptables rate-limit
(Zur Begrenzung der Anzahl an Anfragen je Sekunde um das Zielsystem nicht durch eine boeswillige Attacke zusammen brechen zu lasssen)

Wie es funktioniert

  • Der Administrator klickt im PHP-Skript auf "Server updaten"
  • Das PHP-Skript legt in der Datenbank eine neue Zeile an welche die folgenden Werte enthaelt
    • host: <ZIELSERVER>
    • updatetime: <UHRZEIT>
    • updatepid: null
    • status: pending
    • command: safe-upgrade
    • response: null
    • error: null
  • Das PHP-Skript oeffnet eine TCP-Verbindung auf PORT 6666 des Zielsystems
  • xinetd auf dem Zielsystem reagiert auf die TCP-Anfrage und fuehrt das hinterlegte Administrierungsskript als root aus, welches in MySQL ueberprueft ob neue Inhalte fuer host=ZIELSERVER und status=pending verfuegbar sind
  • Die entsprechenden Zeilen werden ausgelesen und mit status=queued sowie einem aktualisierten timestamp versehen
  • (Kommandos welche nicht status=finished oder status=failed sind und eine X minuten vergangene Updatetime aufweisen werden per Cronjob alle Y Minuten auf die updatepid ueberprueft und gegebenfalls auf status=failed gesetzt)
  • Das Administrierungsskript fuert "aptitude update && aptitude -y safe-upgrade" aus
  • Die Ausgabe wird vom Administierungsskript abgefangen und in die entsprechenden Zeilen (response, error) der Datenbank geschrieben sowie updatetime aktualisiert und status auf finished oder error gesetzt (vom Administrierungsskript entscheidbar)
  • Die Webseite liest das Ergebnis aus der Datenbank und zeigt dem Administrator die Ausgabe an
 
Back
Top