sage24
Goto Top

PerScript (cgi) vom alten Linuxserver auf einen neuen portiert, aber es geht nicht

Hallo zusammen,
also im Vorfeld: ICH habe absolut KEINE Ahnung von Perlscripten!!! Mache ich Studium nun C++, so dass ich mit einigen Begriffen nun umgehen kann...

Vorgeschichte:
Wir haben bei uns im Berieb ein altes Programm laufen, das Textdateien von Messereignissen erzeugt. dieses Programm läuft schon... SEHR lange und der der es verbrochen hat ist natürlich nicht mehr da.

Da wir uns nun so langsam Sorgen um den alten Linuxserver machen, auf dem ein Perl-Script läuft möchte ich das Script auf einen anderen Linuxserver packen. Laut meinem Cheffe geht es leider nicht auf Wampp da es irgendwie auf "Linux" abgestimmt ist.

Um was es geht hier der Anfang des Scriptes, wo ich denke das dort der Fehler steckt:

*
1 #!/usr/bin/perl
2
3 use CGI;
4 use MD5;
5
6 # tempdirname
7 $temp = substr(MD5->hexhash(MD5->hexhash(time(). {}. rand(). $$)), 0, 32);
8
9 # daten von den pcs im werk holen
10 system("mkdir ./daten/$temp");
11 system("smbclient waage/waage -c \"get waage.txt daten/$temp/waage.txt\" >/dev/null");
12 system("smbclient
waage2/waage -c \"get waage2.txt daten/$temp/waage2.txt\" >/dev/null");
13 system("smbclient spl/spl -c \"get stoerung.csv daten/$temp/stoerung.csv\" >/dev/null");
14 system("smbclient
spl/spl -c \"get stoerung daten/$temp/stoerung\" >/dev/null");
15
16 $query = new CGI;
17
18 # dateien einlesen
19 open (WAAGE, "daten/$temp/waage.txt");
20 @waage = <WAAGE>;
21 close (WAAGE);
22
23 open (WAAGE2, "daten/$temp/waage2.txt");
24 @waage2 = <WAAGE2>;
25 close (WAAGE2);
*
Die Zahlen dienen nur der verständlichkeit.
was mir schon aufällt ist dass ein Verzeichniss unter Zeile 10 nicht erzeugt wird. Auch wenn ich die Variable $temp durch eine constante wie temp erzetze wird kein Ordner temp unter dem Ordner daten erzeugt.
auch wenn die Variable $temp auskommentiert wird und eine weitere Variable $temp = temp; erzeugt wird wird ebenfalls kein Ordner Namens temp erzeugt.

Was mir nun durch denn Kopf ging ist ob es sein kann dass die Standartdistribution, die wir verwenden vielleicht durch den Ersteller noch abgeändert wurde damit dieses Script funktioniert?!?!?

Ist die Syntax dort oben so in Ordneng oder fallen euch grobe Fehler auf?
Komisch ist ja dass wir auf dem alten Linuxserver dieses Script kopiert haben und in den neuen Server eingefügt haben.
Der neue Server kann pingen; gepingt werden.
Das Problem taucht ja schon vor dem holen der einzelnen txt-Dateien von den Clients auf, so dass es schon beim Erzeugen des Temp-Ordners zu Problemen kommt..

Ich danke euch

Content-ID: 42635

Url: https://administrator.de/contentid/42635

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

26705
26705 20.10.2006 um 12:37:07 Uhr
Goto Top
Wird das Script auf dem neuen Server auch mit den richtigen Rechten ausgeführt?
Falls nicht, kann das Script den Ordner auch nicht erstellen.

Gibt es denn irgendwelche Fehlermeldungen?
Sage24
Sage24 21.10.2006 um 21:16:15 Uhr
Goto Top
Hi,
das könnte sein??? Hmm wenn ich es mir überlege kann das sein.

Ich habe aber testweise das Script mal auf einem Xampp laufen lassen auf einem XP-Prof.
wenn ich die cgi-File in *pl umbenene werden zwar die statischen WErte angezeigt, aber es werden EBENFALLS keine Ordner angelegt.
Dort habe ich doch aber sicherlich die richtigen Rechte da Windows...

Bei dem Linux habe ich absolut KEINE Ahnung!! Müsste dann nochmals schauen welche Rechte ich denn nachschauen muss.
Ich glaube da gab es eine Gruppe als wwwroot oder so ähnlich. da muss ich mal schauen ob ich die gruppe auf dem neuen PC finde und dort die Berechtigungen nochmals richtig eintrage.

melde mich dann nochmals a monatg oder dienstag.

beten DANK & Gruß
6890
6890 23.10.2006 um 08:03:35 Uhr
Goto Top
morgen,

könntest du bitte mal

#!/usr/bin/perl -w

einstellen und dann auf der konsole mit

perl -c dein_script.pl

den output posten??

mfg godlike P
Sage24
Sage24 23.10.2006 um 16:36:46 Uhr
Goto Top
HA!
Fast habe ich es! Ich habe das WE bei mir zu Hause Xampp installiert und etwas getestet.
Also das PRoblem dass kein Ordner mit den Hashwerten erzeugt wird habe ich nun gelöst:
mkdir ("./daten/$temp", $permissions);
muss es heisenface-smile
Wenn ich dann weiter unten im Script anstelle :
open (WAAGE, "daten/$temp/waage.txt");
@waage = <WAAGE>;
close (WAAGE);

open (WAAGE, "daten/temp/waage.txt");
@waage = <WAAGE>;
close (WAAGE);
schreibe und dort in temp eine Textdatei mit richtigen Inhalten setze funktioniert das gesamte Scriptface-smile)))

Mir fehlt nur noch der Befehl:
system("smbclient \\192.168.64.163\waage -c \"get waage.txt daten/",$temp,"/waage.txt\" >/dev/null");
dieser soll von der IP-Adresse / DNS-Namen die Datei waage.txt im Verzeichniss waage abholen!
Wenn er die hat soll er sie in $temp/waage.txt kopieren.
Leider steckt da irgendwo der Fehler!
Habe bei google schon nach "get cgi datei runterladen oder holen" gesucht ber nichts weltbewegendes gefunden.

Wäre vielleicht jemand so freundlich mir kurz zu schreiben wie ich per Script vom PC eine Text-Datei auf den Server in ein Verzeichniss kopiere?
6890
6890 23.10.2006 um 17:14:04 Uhr
Goto Top
hallo,

am einfachsten wäre esdoch per ftp zu lösen oder??
dazu kannst du dir das modul Net::FTP anschauen.
is relativ einfach gemacht.

wenn fragen sind melden.

mfg godlike P

[EDIT]
was ich jetzt erst sehe face-smile
Laut meinem Cheffe geht es leider nicht auf Wampp da es irgendwie auf "Linux" abgestimmt ist.

nene, kannst dem cheffe sagen: würde auch mit wampp laufen :D
Sage24
Sage24 24.10.2006 um 08:59:16 Uhr
Goto Top
Der Client ist aber nur ein Windowsrechner ohne FTP-Server drauf, so dass ich mit dem Net::FTP nicht viel ausrichten kann.
Gibt es nicht einen Befehl wie diesen: system(xcopy \\192.168.64.163\waage\waage.txt ./daten",$temp,"/waage.txt);
oder so ähnlich.
Der Client hat nur die Freigabe waage und ist ein alter Win98 PC, an dem wir nichts ändern wollen.
Der ApacheServer ist ein XP-Prof.

Übringens geht das gesamte Script nun wenn ich die Dateien per Hand in ein Verzeichniss kopiere... es fehlt halt nur noch die Dateiho-Funktionface-smile
Sage24
Sage24 24.10.2006 um 11:13:38 Uhr
Goto Top
Habe es nun endlich:
#!C:/Programme/xampp/perl/bin/perl.exe

use CGI;
use MD5;
use File::Copy;

  1. tempdirname
$temp = substr(MD5->hexhash(MD5->hexhash(time(). {}. rand(). $$)), 0, 32);

  1. daten von den pcs holen

#system("mkdir ./daten/$temp");
mkdir ("./daten/$temp");
copy('192.168.64.163/waage/waage2.txt', './daten/'.$temp.'/waage2.txt');
copy('
192.168.64.164/waage/waage2.txt', './daten/'.$temp.'/waage.txt');
copy('192.168.64.165/spl/stoerung.csv', './daten/'.$temp.'/stoerung.csv');
#copy('
192.168.64.165/spl/stoerung', './daten/stoerung');

$query = new CGI;

  1. dateien einlesen
open (WAAGE, "daten/$temp/waage.txt");
@waage = <WAAGE>;
close (WAAGE);

so läuft nun allesface-smile)) Und zwar auf einem Xamppface-smile)

Lösung war also nur dass unter Unix/Linux der Smaba-Client angesprochen wurd (smbclient) dieser ist ja bei Win nicht nötig, so dass bei Standartfreigaben ohne Probleme der copy Befehl gentuzt werden kann.
Wenn man dann noch die Bibliothek: use File::Copy; einbindet dann ist alles geritzt.

Oh man bin so froh dass die *** endlich klappt, so brauchen wir nicht mehr angst haben dass der alte server abraucht.

BESTEN DANK an alle !!!!!