Moin,
Das Skript ist soweit fertig. Es funktioniert soweit, ausser das mit der auth= 1 (Line 41) will nicht, ist aber kein Problem, denn Wenn er keine Verbindung aufbaut, läuft es die Schleifen normal durch ohne dass es sich beendet.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/usr/bin/perl
use POSIX; # Unix Timestamp
use Net::SCP qw(scp); # Datentransfer via SCP
use Time::Local; # Zeitabfrage
# Login Informationen
my $user = 'USER';
my $host = 'HOST';
# Dateiinformationen
my $file_path = 'PATH_TO_FILE'; # Pfad zu Protokoll
my $filenumber = 0;
my $filename = 'FILENAME';
my $newfile = $filename.$filenumber;
my $nextnumber = $filenumber;
my $begintime = localtime($timing);
# Zeitabfrage
my $localtime = time();
my $startTime = time();
my $timeNow = $startTime;
my $duration = 0;
my $auth = 0;
my $tmp;
# Zeitabfrage wird in Log eingetragen.
open (BT, ">begintime.txt");
print BT "UnixTime: ", scalar $localtime, "\n";
print BT "Lokale Zeit: ", scalar localtime($localtime), "\n\n";
close BT;
while (true) { # daemon-Schleife
if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) {
while ( not $auth ) { # Verbindungsschleife
if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) {
print "Verbindung wird hergestellt zu ", scalar $host, " als ", scalar $user, "...\n";
$scp = Net::SCP->new($host);
$scp->login($user);
$auth = $scp->login($user); # Wenn Verbindung erfolgreich, dann weiter.
}
$tmp = time();
$duration = $tmp - $timeNow;
$timeNow = $tmp;
}
# Protokoll(e) herunterladen
print "Protokolle werden heruntergeladen... \n", scalar $file_path, "\n";
if (-e $filename) {
print "Datei existiert bereits, neuer Name vorschlagen...\n";
rename($filename, $newfile) or
warn "Datei konnte nicht umbenannt werden. \n";
if (-e $newfile) { # Wenn $newfile bereits existiert dann $filenumber um 1 addieren.
$filenumber++ +1;
rename($newfile, $newfile.$filenumber) or
warn "Datei konnte nicht umbenannt werden. \n";
}
print "Neuer Dateiname: ", scalar $newfile.$filenumber, "\n";
$scp->get($file_path) or die $scp->{errstr};
print "Ausgabe: ", scalar $scp, "\n";
}
else {
print "Datei existiert nicht. \n";
$scp->get($file_path) or die $scp->{errstr};
print "Ausgabe: ", scalar $scp, "\n\n";
}
print "Verbindung wird getrennt...\n\n";
$scp->quit; # Verbindung trennen
$auth = 0;
}
$duration = time() - $timeNow;
$timeNow = time();
}
|
Wo es auch noch ein kleines Problem gäbe ist, wenn die Verbindung während des Downloads (Line 63 und 6
ausfällt bleit das Skript dort stehen ca 4min und beendet sich mit folgender Fehlermeldung:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
molli@penguin ~/projects/mprm $ perl main.pl
Verbindung wird hergestellt...
Protokolle werden heruntergeladen:
"PATH_TO_FILE"
Ausgabe: Net::SCP=HASH(0x814b180)
Verbindung wird getrennt...
Verbindung wird hergestellt...
Net::SCP=HASH(0x814b180)
Protokolle werden heruntergeladen:
"FILE.LOG0"
Read from remote host HOST: Connection reset by peer
lost connection
|
Da der Download wenige Sekunden dauert, gäbe es die Lösung, dass eine If-Schleife überwacht (Wenn länger als 60sekunden dann weiter im Code). Aber das werde ich in den nächsten paar Tagen in aller Ruhe nachholen
@Garrett: Vielen Dank für deine Hilfe und die schnellen Antworten, du hast dich sehr eingesetzt. Ich habe einiges gelernt mit der Programmierung von Perl.
Vielen Dank für eure Hilfe!
Gruss mollilinux
EDIT:
Das oben genannte Problem konnte ich beheben, indem ich eine einfache Schleife zwischen den Download (Line 63 und 68 ) setzte (Wenn 300 überschritten, dann weiter.) Somit gibt es bei SCP.pm keinen Timeout mehr, das heisst das Programm beendet sich nicht mehr. Hiermit ist das Skript komplett.
|
Quellcode
|
1
2
3
4
5
6
|
eval {
local $SIG{ALRM} = sub { die "timeout 180 - Keine Verbindung zum Server.\n\n"};
alarm(180); # Wenn länger als 3min dann weiter.
$scp->get($firefox_path) or die $scp->{errstr};
alarm(0); # alarm zurücksetzen
};
|
Gruss mollilinux