Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

21

23.02.2010, 21:17

Schreib statt dem

Quellcode

1
2
$scp->login($user);
$auth = 1;


das:

Quellcode

1
$auth = scp->login($user);

wenn du $auth per hand 1 setzt weiß das programm noch lange nicht, ob die verbindung geklappt hat.

Zu den Backups:
Die Lösung hängt davon ab, ob du willst, dass das script jedes mal wenn es startet wieder bei log.0 anfängt, oder dort wo es das letzte mal aufgehört hat. ersteres ist codemäßig einfacher zu bewerkstelligen und du hast nicht irgendwann ein verzeichnis mit 2001238484534534552 logdateien. Aber bei letzterem kann man mehr lernen und wenn du auch noch eine logrotate funktion einbaust (oder eine externe benutzt) kannst du das verzeichnis sogar sauber halten.

Ich überlege grade... weiß hier jemand, ob man aus einer ssh stdout in ein File auf nem lokalen rechner redirecten kann? Das würd das problem nämlich um einiges besser angehen. (mit tail -f)

mollilinux

unregistriert

22

23.02.2010, 21:30

Zitat von »Garrett«

Die Lösung hängt davon ab, ob du willst, dass das script jedes mal wenn es startet wieder bei log.0 anfängt, oder dort wo es das letzte mal aufgehört hat.


Vielen Dank für die schnelle Antwort. Nein, wenn ich das Script neu starte soll es wieder bei 0 anfangen, denn ich überprüfe jeden Abend die Logs manuell und verschiebe dann in ein Backupverzeichnis (z.B backup-23-02-10). Dann kann das Skript am nächsten Tag wieder bei 0 anfangen.

Zitat von »Garrett«

wenn du $auth per hand 1 setzt weiß das programm noch lange nicht, ob die verbindung geklappt hat.


Funzt nicht. Denn wenn die Zeile $auth = scp->login($user); so steht mein das Programm dass wenn der Befehl ausgeführt worden ist, dass es weitergehen soll. Ich überlege gerade ob man nicht noch eine Schleife anhängen müsste oder noch eine my Reservierung wo steht wenn login erfolgreich dann weiter (1) oder wenn nicht erfolgreich dann (0) oder (true, false) keine Ahnung.

Gruss mollilinux

EDIT:

Noch etwas zum Datei umbenennen. Habe mal eine mögliche Schleife, dass wenn die Datei FILE existiert dass eine Zahl angehängt werden soll. Wenn ich das aber ausführe, dann wird die datei nicht in FILE0 sondern nur nach 0 umbenannt. Das Ziel der Schleife ist es, Wenn die Datei FILE existiert noch überprüft werden soll, ob die Datei FILE0 bereits existiert. Wenn FILE0 existier soll es eine Zahl höher gehen und nach FILE1 erstellen.

Die Umbenenn-Schleife scheint irgendwie nicht aufzugehen. Nehmen wir an FILE0 existiert, dann geht er keine Zahl höher.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $filenumber = 0;
my $filename = 'FILE';
my $newfile = $filename+$filenumber;
my $nextnumber = $filenumber++;

if (-e $filename) {
      rename($filename, $newfile) or
	  warn "Datei konnte nicht umbenannt werden. \n";
      if (-e $newfile) { # Wenn $newfile existiert, dann eine zahl höher
	  $filename+$nextnumber;
      }
      print "Datei existiert bereits, neuer Name vorschlagen...\n";
      $scp->get($FILE) or die $scp->{errstr}; # Protokoll herunterladen.
      print "Ausgabe: ", scalar $scp, "\n";
      } 
      else {
      print "the file does not exist!\n";
}


Ich habe irgendwie ein ziemliches Wirrwar in der Umbenenn-Schleife. Komme irgendwie nicht weiter.

Hast du eine Idee?

Gruss mollilinux

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »mollilinux« (23.02.2010, 22:26)


23

23.02.2010, 23:35

Zitat

Funzt nicht. Denn wenn die Zeile $auth = scp->login($user); so steht mein das Programm dass wenn der Befehl ausgeführt worden ist, dass es weitergehen soll. Ich überlege gerade ob man nicht noch eine Schleife anhängen müsste oder noch eine my Reservierung wo steht wenn login erfolgreich dann weiter (1) oder wenn nicht erfolgreich dann (0) oder (true, false) keine Ahnung.


sag mir mal was ein script mit dem Text:

Quellcode

1
2
3
use Net::SCP qw(scp);
$scp = Net::SCP->new($host);
print $scp->login($user);


anzeigt.

Zitat


Noch etwas zum Datei umbenennen. Habe mal eine mögliche Schleife, dass wenn die Datei FILE existiert dass eine Zahl angehängt werden soll. Wenn ich das aber ausführe, dann wird die datei nicht in FILE0 sondern nur nach 0 umbenannt. Das Ziel der Schleife ist es, Wenn die Datei FILE existiert noch überprüft werden soll, ob die Datei FILE0 bereits existiert. Wenn FILE0 existier soll es eine Zahl höher gehen und nach FILE1 erstellen.


Jap, das liegt daran, dass man strings ('FILE') und integer (0) nicht mit nem "+" aneinanderhängen kann, sondern man dazu einen Punkt (.) nimmt. Klappt übrigens auch, wenn man nur strings aneinanderhängen will. (Herje, ich lern hier mehr Perl als mir lieb ist :) )

mollilinux

unregistriert

24

24.02.2010, 10:14

Moin

Zitat von »Garrett«


sag mir mal was ein script mit dem Text:


Dein Skript gibt den Username aus (Wenn ich $host und $user ersetze). Ansonsten passiert nichts...

Quellcode

1
2
molli@penguin ~/projects/mprm$ perl versuch.pl
USERNAMEmolli@penguin ~/projects/mprm$


Gruss mollilinux

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mollilinux« (24.02.2010, 10:29)


mollilinux

unregistriert

25

24.02.2010, 15:56

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 68) 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

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »mollilinux« (25.02.2010, 23:32)