PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : apache: autom. starten eines php scripts, aber wie ??



laminar
23.09.02, 10:35
hallo zusammen,
folgendes problem, für das es bestimmt eine einfache lösung gibt, wenn
man nur den ansatz findet....

ich empfange (email, oder ftp oder selbst downloaden von fremdem server) regelmässig eine .csv datei, die in meine mysql DB eingelesen werden muss; zusätzlich müssen dateianhänge hochgeladen werden - diese vorgänge erledigt momentan ein phpscript.

wie kann ich dieses geschehen nun automatisieren ?

ideal wäre, wenn bei e-mail empfang der csv datei die daten irgendwie an das script übergeben wrden könnten.. sendmail bietet doch eine funktion " programm aufrufen" oder so ählich...

oder, gibt es andere, bessere lösungen ?

namina
23.09.02, 11:20
wenn du die Datei immer von demselben Server downloaden kannst, würde ich dir einen Cronjob empfehlen.

Schreib dir ein Skript das z.B. per wget die Datei herunterlädt, die Datei mit der Vorhandenen vergleicht, und im Falle einer Veränderung das php-Skript startet.

Gruß Namina

laminar
23.09.02, 11:36
könntest du das bitte genauer erklären... ? wget finde ich nicht bei den funktinen und wie das mit dem cron job läuft ist mir auch nicht ganz klar..

Fir3fly
23.09.02, 12:52
wget ist ein eigenes Programm. Um damit ein php script zu aktivieren würde ich denken, daß das an derr Konsole ungefähr so aussehen sollte:

wget http://www.linuxforen.de/forums/newreply.php (läd eigendlich den inhalt dieser seite auf den lokalen rechner)

das ganze noch in einen cronjob gepackt:

crontab -e ---> (lieber erst ma man crontab:))

dann sollte zu deinen bestimmten Zeitpunkten wget das php script duch den abruf der seite "ausführen" lassen.

Fir3fly

namina
24.09.02, 11:07
hier kommt die Lösung:

#!/bin/sh

. /etc/rc.d/init.d/functions

cd /Verzeichnis
if [ -f /Verzeichnis/Datei.csv ] ; then
cp Datei.csv Datei.csv.old
fi
if ! (wget -O Datei.cvs http://www.Domain/Verzeichnis/Datei.csv) ; then
echo "Download fehlgeschlagen" >&2
fi
if [ -f /Verzeichnis/Datei.csv.old -a -f /Verzeichnis/Datei.csv ]; then
INH=`/usr/bin/diff Datei.csv Datei.csv.old`
fi

if [ $? <> 0 ] ; then
. /Verzeichnis/php.script
fi
exit 0

Kurze Erklärung:
als erstes wird eine Sicherheitskopie der bestehenden cvs Datei gemacht, wenn diese bereits existiert.
Dann wird die neue .csv Datei heruntergeladen
Wenn es eine .csv und eine .csv.old Datei gibt, wird ein Diff gemacht um zu prüfen ob sie unterschiedlich sind, oder ob es noch dieselbe Datei ist.
Wenn die Dateien gleich sind, wird nichts gemacht. Wenn die Dateien unterschiedlich sind wird die Datei php.script ausgeführt. Hier mußt du halt eintragen wie das Skript normalerweise gestartet wird.
Wenn du jetzt noch prüfen willst, ob das Skript ordnungsgemäß gestartet wurde, mußt du nochmal eine if-bedingung einfügen. etwa so:
if [ $? <> 0 ] ; then
echo " Fehlgeschlagen"
cp /Verzeichnis/Datei.csv.old /Verzeichnis/Datei.csv
. /verzeichnis/php.sctipt
fi
Dann wird, wenn das skript nicht mit dem Exit-Status 0 beendet wurde die alte Datei wieder zurückkopiert, und das php.script neu gestartet. Allerdings weiß ich nicht welche exit-staten dein Php-skript liefert. Das müßtest du selbst herausfinden.

Natürlich mußt du noch Verzeichnisse und Dateien auf dich anpassen, aber ich denke das kriegst du sicher hin.

Gruß Namina

laminar
24.09.02, 12:11
vielen dank erstmal für deine mühe...

könnte ich das einfach in ein file "csvupdate.sh" schreiben und dann per

00 00 * * * /usr/home/www/crons/csvupdate.sh

als cronjob ausführen ?

namina
24.09.02, 12:20
genau.

Ich weiß ja nicht, aber ist 00 nicht etwas übertrieben. Wenn du das ständig laufen lassen willst, solltest du das skript nochmal ändern, so daß er nicht jedesmal die Datei herunterlädt, sondern nur dann, wenn eine neue Version da ist.

laminar
24.09.02, 12:40
da hast du natürlich recht...
danke

bernie
24.09.02, 12:59
Hi,

wieso? 00 heisstja in dem cron, dass die Datei immer zu Mitternacht heruntergeladen wird. Wären es Sterne würde es jede Minute runtergeladen werden.

Ciao, Bernie

namina
24.09.02, 13:18
Original geschrieben von bernie_x
wieso? 00 heisstja in dem cron, dass die Datei immer zu Mitternacht heruntergeladen wird. Wären es Sterne würde es jede Minute runtergeladen werden.


UUps, tja, manchmal vergess ich vorher zu denken.

Danke Bernie