Leser: 32
1
2
3
4
5
6
7
8
9
10
11
12
13
...
sh: -c: Zeile 0: `doConnect() BENUTZER@HOST /usr/bin/ssh 1266935440 1266935440 0'
sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `walti@openmolli.dynalias.com'
sh: -c: Zeile 0: `doConnect() BENUTZER@HOST /usr/bin/ssh 1266935440 1266935440 0'
sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `walti@openmolli.dynalias.com'
sh: -c: Zeile 0: `doConnect() BENUTZER@HOST /usr/bin/ssh 1266935440 1266935440 0'
sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `walti@openmolli.dynalias.com'
sh: -c: Zeile 0: `doConnect() BENUTZER@HOST /usr/bin/ssh 1266935440 1266935440 0'
sh: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `walti@openmolli.dynalias.com'
sh: -c: Zeile 0: `doConnect() BENUTZER@HOST /usr/bin/ssh 1266935440 1266935440 0'
...
und weitere selbe Zeilen.
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
#!/usr/bin/perl use POSIX; my $host = 'HOST'; my $user = 'USER'; my $startTime = getUnixTime(); my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; # Subroutine für getUnixTime sub getUnixTime { my $sec = 40; my $min = 30; my $hour = 14; my $day = 23; my $mon = 2 - 1; my $year = 2010 - 1900; my $wday = 0; my $yday = 0; my $unixtime = mktime ($sec, $min, $hour, $day, $mon, $year, $wday, $yday); } # Subroutine für System-Call sub exec_command { system("doConnect() $cmd_login $ssh_bin $startTime $duration $auth"); } while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { sub doConnect { $cmd_login = "$user\@$host"; $ssh_bin = `which ssh`; chomp $ssh_bin; exec_command(); } doConnect(); # doAuth(); } $tmp = getUnixTime; $duration = $tmp - $timeNow; $timeNow = tmp; } getLogs(); disconnect(); $auth = 0; } $duration = getUnixTime() - $timeNow; $timeNow = getUnixTime(); }
1 2 3 4 5 6 7 8 9 10 11
sub exec_command { system("doConnect() $cmd_login $ssh_bin $startTime $duration $auth"); } while (...) { sub doConnect { $cmd_login = "$user\@$host"; $ssh_bin = `which ssh`; chomp $ssh_bin; exec_command(); } doConnect();
1 2 3 4 5 6 7 8 9 10 11
sub exec_command { my ($cmd_login, $ssh_bin, $startTime, $duration, $auth) = @_; system("doConnect() $cmd_login $ssh_bin $startTime $duration $auth"); } while (...) { my $cmd_login = "$user\@$host"; my ssh_bin = `which ssh`; chomp $ssh_bin; ... exec_command($cmd_login, $ssh_bin, $startTime, $duration, $auth); }
system("$ssh_bin $cmd_login QUELLDATEI ZIELDATEI");
pqdas system("doConnect() ...") kommt mir etwas merkwürdig vor, aber das hab ich mal so gelassen, weil ich nicht weiss, welche shell du benutzt und was das bezwecken soll.
Taulmarill
Btw. zum kopieren von Dateien besser scp als ssh benutzen.
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
#!/usr/bin/perl # Verbindung via SCP use Net::SCP qw(scp); # Login Informationen my $user = "USER"; my $host = "HOST"; my $startTime = getUnixTime(); my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { # doConnect(); mit scp-new ersetzt $scp = Net::SCP->new($host, $user); # doAuth(); - braucht kein Passwort da SSH-Key hinterlegt } $tmp = getUnixTime(); $duration = $tmp - $timeNow; $timeNow = tmp; } getLogs(); disconnect(); $auth = 0; } $duration = getUnixTime() - $timeNow; $timeNow = getUnixTime(); }
2010-02-23T15:00:18 mollilinuxpqdas system("doConnect() ...") kommt mir etwas merkwürdig vor, aber das hab ich mal so gelassen, weil ich nicht weiss, welche shell du benutzt und was das bezwecken soll.
Also ich verwende die bash shell unter Gentoo GNU Linux.
QuoteStatt der Funktion getUnixTime() muss ich die einsetzen, mit der Perl eben den Unix timestamp zurückgibt. (Keine Ahnung, welche das ist, deshalb hab ich das so geschrieben). Damit die Schleifen funktionieren will ich einen unixtime stamp einsetzen
sid_burnUnter perl bekommst du dies mit der Funktion "time()".
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
#!/usr/bin/perl use POSIX; # Unix Timestamp use Net::SCP qw(scp); # Datentransfer via SCP # Login Informationen my $user = 'USER'; my $host = 'HOST'; my $startTime = time(); my $timeNow = $startTime; my $duration = 3; my $auth = 0; my $tmp; print "Automatisches Backup"; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { # doConnect(); $scp = Net::SCP->new($host, $user); # doAuth(); print "Wiederholungsrate"; } $tmp = time(); $duration = $tmp - $timeNow; $timeNow = tmp; } getLogs(); disconnect(); $auth = 0; } $duration = time() - $timeNow; $timeNow = time(); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
molli@penguin ~/projects/mprm $ perl main.pl
...
rholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholung
srateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWi
ederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederhol
ungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrat
eWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWieder
holungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrate
WiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederh
olungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsr
ateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWied
erholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholun
gsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateW
iederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsrateWiederholungsr
...
molli@penguin ~/projects/mprm $
2010-02-23T17:26:41 mollilinux[...]
Mir ist es nicht klar, wo ich sleep einbauen soll, denn normalerweise müsste das die Verbindungs-Schleife für mich tun (5sek warten).
Quote[...]
Wo könnte das Problem liegen, dass plötzlich so eine rasche widerholung kommt, dann die 5s warten?
[...]
1 2 3 4 5 6 7 8 9 10 11 12
use AnyEvent; # Used for Main Loop my $main = AnyEvent->condvar; # call callback every 5 seconds - first time starts immediately my $t = AnyEvent->timer( interval => 5, cb => sub { print scalar localtime, "\n"; }); # Enter Main Loop $main->recv;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use AnyEvent; # Used for Main Loop my $main = AnyEvent->condvar; print scalar localtime, "\n"; # After 5 seconds my $t; $t = AnyEvent->timer( after => 5, cb => \&print_time ); # Enter Main Loop $main->recv; sub print_time { sleep 10; print scalar localtime, "\n"; $t = AnyEvent->timer( after => 5, cb => \&print_time ); }
sid_burnUnd hierfür kann man auch (r)syslog konfigurieren das er automatisch zu anderen hosts logt oder sonstige alternativen.
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
#!/usr/bin/perl use POSIX; # Unix Timestamp use Net::SCP qw(scp); # Datentransfer via SCP # Login Informationen my $user = 'USER'; my $host = 'HOST'; # Dateiinformationen my $file_path = 'PATH_TO_FILE'; # Pfad zu Protokoll my $filenumber = 0; my $filename = 'FILE'; my $newfile = $filename.$filenumber; my $nextnumber = $filenumber++; # Zeitabfrage my $localtime = time(); my $startTime = time(); my $timeNow = $startTime; my $duration = 0; my $auth = 0; my $tmp; while (true) { # daemon-Schleife if ( ( ($timeNow - $startTime) % (120 + $duration) ) == 0 ) { while ( not $auth ) { # Verbindungsschleife if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { print "Verbindung wird hergestellt... \n", scalar $scp, "\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 $firefox_path, "\n"; if (-e $filename) { rename($filename, $newfile) or warn "Datei konnte nicht umbenannt werden. \n"; while (-e $newfile) { # Existiert FILE0, dann FILE1. $nextnumber; $newfile.$filenumber; } print "Datei existiert bereits, neuer Name vorschlagen...\n"; $scp->get($file_path) or die $scp->{errstr}; print "Ausgabe: ", scalar $scp, "\n"; } else { print "Datei existiert noch nicht. \n"; $scp->get($file_path) or die $scp->{errstr}; print "Ausgabe: ", scalar $scp, "\n" } print "Verbindung wird getrennt...\n"; $scp->quit; # Verbindung trennen $auth = 0; }
2010-02-24T08:56:26 mollilinux
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11my $filenumber = 0; my $filename = 'FILE'; my $newfile = $filename.$filenumber; my $nextnumber = $filenumber++; [...] while (true) { # daemon-Schleife while (-e $newfile) { # Existiert FILE0, dann FILE1. $nextnumber; $newfile.$filenumber; }
pq
ich weiss nicht, was du denkst, was der code macht.
PQzeile 3 setzt $newfile auf "FILE0".
zeile 4 inkrementiert $filenumber um eins, und setzt $nextnumber auf das, was $filenumber vorher war. $filenumber ist dann also 1 und $nextnumber ist 0.
QuoteDas mit dem Inkrement finde ich irgendwie komisch. Meiner Meinung nach müsste die Stelle um 1 addiert werden, aber $nextnumber darf nicht auf den vorherigen Wert von $filenumber setzen.
$num++
++$num
sid_burnIst postinkrement. Die Logik ist ungefähr: In dieser "programmzeile" behält es den wert und nach dieser zeile wird der inhalt um eins erhöht.
$scp->get($file_path) or die $scp->{errstr};
1
2
3
"PATH_TO_FILE.LOG"
Read from remote host openmolli.dynalias.com: Connection reset by peer
lost connection
biancaZu Beginn der Schleife den Wert von time() speichern und am Ende auch wieder. Die Differenz ist die Laufzeit in Millisekunden.
Hilft das?
QuoteSchau dir bitte mal folgenden Artikel an:
http://perl-howto.de/2008/06/die-ausfuhrungsdauer-...
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93
#!/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 $firefox_path = 'PATH_TO_FILE'; # Pfad zu Protokoll my $filenumber = 0; my $filename = 'places.sqlite'; 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) % (3 + $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 $firefox_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"; 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 }; print "Ausgabe: ", scalar $scp, "\n"; } else { print "Datei existiert nicht. \n"; 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 }; print "Ausgabe: ", scalar $scp, "\n\n"; } print "Verbindung wird getrennt...\n\n"; $scp->quit; # Verbindung trennen $auth = 0; } $duration = time() - $timeNow; $timeNow = time(); }
2010-02-24T16:20:55 mollilinuxCode (perl): (dl )#!/usr/bin/perl
use POSIX; # Unix Timestamp
use Net::SCP qw(scp); # Datentransfer via SCP
use Time::Local; # Zeitabfrage
my $begintime = localtime($timing);
my $nextnumber = $filenumber;
print BT "UnixTime: ", scalar $localtime, "\n";
print BT "Lokale Zeit: ", scalar localtime($localtime), "\n\n";
while (true) { # daemon-Schleife
while ( not $auth ) { # Verbindungsschleife
1 2
if ( ( ($timeNow - ($startTime+$duration)) % 5 ) == 0 ) { print "Verbindung wird hergestellt zu ", scalar $host, " als ", scalar $user, "...\n";
1 2 3
$scp = Net::SCP->new($host); $scp->login($user); $auth = $scp->login($user); # Wenn Verbindung erfolgreich, dann weiter.
1 2 3
if (-e $newfile) { # Wenn $newfile bereits existiert dann $filenumber um 1 addieren. $filenumber++ +1;
1 2 3 4 5 6
rename($newfile, $newfile.$filenumber) or warn "Datei konnte nicht umbenannt werden. \n"; } print "Neuer Dateiname: ", scalar $newfile.$filenumber, "\n";
$scp->quit; # Verbindung trennen
DubuHier fehlen immer noch use strict und use warnings.
DubuAch ja, eins noch: Ich hoffe wirklich sehr für dich und den User, der am Zielrechner arbeitet, dass er/sie weiß, dass du sein/ihr Surfverhalten aufzeichnest!
2010-02-26T22:01:26 mollilinuxNur weil $firefox_path im Skript vorkommt heisst das nicht, dass ich ein Surfverhalten aufzeichnen möchte.
my $filename = 'places.sqlite';
1
2
$ cp ~/.mozilla/firefox/*.default/places.sqlite kopie.sqlite
$ sqlite3 kopie.sqlite 'select * from moz_history'
QuoteDa ich jemand aus meiner Verwandschaft in die Computerwelt einführen muss, hat mich diese Person nach Vereinbarung berechtigt, eine Konfigurationsdatei des Mozilla Firefox Web Browsers (daher auch $firefox_path) zu synchronisieren, welche eine Liste der Ordner enthält, in denen Erweiterungen installiert sind/werden.
QuoteIm Google finde ich nichts passendes dazu (perl Zeitschleife...).
QuoteDa das Skript nicht aufhören zu laufen darf, braucht es eine Schleife "Wenn der Download-Command länger als 3min dauert dann weiter im Script.
1 2 3 4 5 6 7 8 9 10 11 12
eval { local $SIG{ALRM} = sub { die "mauahaha\n" }; alarm(5); print "Namen in 5 Sekunden eingeben: "; chomp( my $name = <STDIN> ); alarm(0); }; if ( $@ ) { # timeout print "\nBoooom! Sie haben länger als 5 Sekunden gebraucht!\n"; }