PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : prozess via php script auf dem linux server starten



ccc
10-01-2004, 11:36
hallo

es gibt unter php eine funktion namens shell_exec.
mit dieser sollte man shell befehle über php ausführen lassen.

auf dem SuSE 8.2 läuft bei mir ein cisco vpnclient-linux-3.7.3.A-k9
und funktioniert.
wenn aber länger nichts passiert macht er die Verbindung zu.

möchte aber den User die Möglichkeit geben, den vpn client
je nach Bedarf via browser starten.

vpn client startet normalerweise mit:

/etc/init.d/vpnclient_init restart

wie würden syntax für so ein script aussehen ?
mit php kenne mich leider nicht so aus.

MFG
ccc

sixfriends
11-01-2004, 02:07
shell_exec kenn ich net, aber so sollte es auch gehen:

<?php
exec("/etc/init.d/vpnclient_init restart");
?>

shell_exec hat vermutlich die selbe Syntax.

Duke
11-01-2004, 03:49
Na ja ich würde dann aber auf alle Fälle nen Passwortgeschützenbereich drum rumbauen bei Shellausführungen.

ccc
11-01-2004, 14:25
hallo

vielen herzlichen dank !

mit


<?php

exec("/etc/init.d/vpnclient_init restart");

?>


funktioniert wunderbar.

gibt's aber irgendwelche möglichkeit zuerst mit PHP zu überprüfen,
ob der prozess aktiv ist und erst dann exec laufen lassen ?

# ps ax | grep vpnclient
1635 ? S 0:00 /usr/local/bin/vpnclient

bzw.
ein ping ausführen und erst wenn keine antwort gibt,
dann exec laufen.

möchte eben verhindern, dass die user den vpnclient nicht gegenseitig
unnötig abschiessen.

password schutz klar und ist bereits eingerichtet.
es ist aber nicht so schlimm, weil server nur intern erreichbar ist.

gruss
ccc

sixfriends
11-01-2004, 16:03
<?php
$result = exec("ps ax | grep '/usr/local/bin/vpnclient' | grep -v 'grep'");
if (!empty($result)) {
exec("/etc/init.d/vpnclient_init restart");
}
?>
EDIT: exec gibt die Ausgabe des ausgeführten Befehls an das Script zurück (Oder war es nur die erste Zeile??)

ccc
11-01-2004, 16:50
hallo sixfriends

erstes script funktioniert einwandfrei,

aber zweites nicht.

wenn ich vpnclient manuell stoppe und script laufe,

geschiet nichts.

vpnclient wird nicht gestartet.

gruss
ccc

sixfriends
11-01-2004, 20:51
Peinlich, peinlich: Muss natürlich if (empty(..... heissen, soll den vpnclient ja schliesslich starten, wenn kein solcher Prozess gefunden wurde.
:eek:
Mein Fehler

ccc
11-01-2004, 21:15
hallo

bin inzwischen selber zu einer anderer lösung gekommen:

<?php

$result = exec("ps ax | grep '/usr/local/bin/vpnclient' | grep -v 'grep'");

if ("$result?" != "0") {

exec("/etc/init.d/vpnclient_init restart");

}

?>

funktioniert auch.

anyway herzlichen dank für die hilfe.

gruss und schönen abend
ccc

ccc
11-01-2004, 21:34
hi

habe aber anderes problem:
wenn ich von der linux konsole diesen php script als root user starte,
funktioniert tadellos.

wenn ich aber im webverzeichnis platziere und via browser ausführen will,
dann geht es nicht.

vermutlich hat apache user keine rechte prozese zu starten.

weiss jemand, wie ich dies ändern kann und aus sichercheitsgründen,
wenn es geht nur diesen prozes erlauben ?

gruss
ccc

sixfriends
11-01-2004, 23:38
Bin jetzt nicht so der Linux Gott, aber gibt es dafür nicht den Befehl su??

Benutzung: rtfm ;)

btw: Vermutlich falsches Forum für so was --> linuxforen.de

mehlvogel
12-01-2004, 00:51
sudo heißt das was du möchtest ccc

ccc
12-01-2004, 10:51
mit

exec("sudo -u root /etc/init.d/vpnclient_init restart");

funktioniert von command line, aber NICHT via browser !

gruss
ccc