Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6346[/thread]

Crontab: Mein Script funzt mit crontab nicht!!



<< >> 6 Einträge, 1 Seite
Kogge
 2004-06-17 19:25
#83540 #83540
User since
2004-06-17
24 Artikel
BenutzerIn
[default_avatar]
Kennt sich jemand mit crontab aus?? Dann kann er/sie mir sicher sagen weshalb mein script immer eine Fehlermeldung erzeugt!!

Code: (dl )
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print qq~
<html>
 <head>
  <meta http-equiv="refresh" content="900">
 </head>
 <body>~;

use Net::FTP;

my $host="host";
my $directory="html";

my $counter_file = 'cam.csv';
my $lock_file    = 'cam.lock';
my $lock_dir     = 'cam_lock';
my $count;
my $flock_support = 1;


if ($flock_support == 0) {
   &lock_file;
   if (-e $counter_file) {
        open (COUNTER_FILE,"+<$counter_file") or die "Kann $counter_file nicht öffnen: $!\n";
   }
}else {
   if (-e $counter_file) {
        open (COUNTER_FILE,"+<$counter_file") or die "Kann $counter_file nicht öffnen: $!\n";
        flock(COUNTER_FILE,2) or die "Can file nicht sichern: $!\n";
   }
}
#------------------------------------------------------------------------------------------


--
   $count = <COUNTER_FILE>;
   chop $count;
   close(COUNTER_FILE);
   $count++;
   if (-e $counter_file) {
        open (COUNTER_FILE,">$counter_file") or die "Kann $counter_file nicht öffnen: $!\n";
        flock(COUNTER_FILE,2) if $flock_support or die "Can file nicht sichern: $!\n";
   }
   print (COUNTER_FILE "$count;");
   close(COUNTER_FILE);
#------------------------------------------------------------------------------------------


--
if($flock_support == 0) {
   close(COUNTER_FILE);
   &unlock_file;
}else { close(COUNTER_FILE); }



   $ftp=Net::FTP->new($host,Timeout=>240) or $newerr=1;
     push @ERRORS, "Can't ftp to $host: $!\n<br>" if $newerr;
     myerr() if $newerr;
     print $ftp->message;
     print "<br>";

   $ftp->login("usn","pwd") or $newerr=1;
   print "Getting file list<br>";
     push @ERRORS, "Can't login to $host: $!\n<br>" if $newerr;
     $ftp->quit if $newerr;
     myerr() if $newerr;
     print $ftp->message;
     print "<br>";

   $ftp->cwd($directory) or $newerr=1;
     push @ERRORS, "Can't cd  $!\n<br>" if $newerr;
     myerr() if $newerr;
     print $ftp->message;
     print "<br>";
     $ftp->quit if $newerr;

   @files=$ftp->dir or $newerr=1;
     push @ERRORS, "Can't get file list $!\n<br>" if $newerr;
     myerr() if $newerr;
     print $ftp->message;
     print "<br>";

   #foreach(@files) {
   #  print "$_\n<br>";
   #}

   $ftp->binary();
   $ftp->get('cam.jpg',"cam_$count.jpg") or $newerr=1;
    push @ERRORS, "Can't get file $!\n<br>" if $newerr;
    myerr() if $newerr;
    print $ftp->message;
    print "<br>";
   $ftp->quit;
   print "Closed FTP<br>";
   print qq~$count Bilder downloaded
    </body>
   </html>~;




sub lock_file {
   my $lock_timeout = 60;
   my $lock_count;

   while(-f $lock_file && !mkdir($lock_dir,0777)) {
       if (++$lock_count > $lock_timeout) {
           die("Kann \"$lock_file\" nicht sichern!: $!\n");
           return 1;
       }
       sleep (1);
   }

   open(LOCK,">$lock_file") || die("Can't open $lock_file: $!\n");
   return 0;
}

sub unlock_file {
   close(LOCK);
   unlink("$lock_file");
   rmdir($lock_dir);
}


sub myerr {
 print "Error: \n";
 print @ERRORS;
 exit 0;
}


Die HTML-Codes sind halt noch vorhanden, weil der Crontab eben nicht funktioniert hat. Ansonsten ist der script simple, er sollte alle 15 min zu einem FTP-Server verbindung aufnehmen eine Bilddatei runterladen und das wärs. Nur das es nur funzt wenn ich es perl Browser aufrufe!!\n\n

<!--EDIT|Kogge|1087845598-->
BungeeBug
 2004-06-17 23:42
#83541 #83541
User since
2004-03-16
54 Artikel
BenutzerIn
[default_avatar]
Hi,

entweder ich verstehe dich nicht richtig oder du machst es dir sehr umständlich. Wie wärs mit nem einfachen "wget 'url' " und das alle 20 min per crontab?
MfG
BungeeBug
format_c
 2004-06-18 01:34
#83542 #83542
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das Problem hatte ich bei dem Überprüfungsprogramm was hier für die Linkliste eingesetzt wird auch.
Ich denke mal das Problem sind die relativen Pfadangaben:
Code: (dl )
1
2
3
my $counter_file = 'cam.csv';
my $lock_file = 'cam.lock';
my $lock_dir = 'cam_lock';


Also gehe ich davon aus, da wo das Script liegt, liegen auch diese Dateien resp. Verzeichnisse.
Dafür gibt es ein einfaches Standardmodul FindBin was den absoluten Pfad zum Scrip ermittelt.

Man setzt es so ein:
Code: (dl )
1
2
3
4
use FindBin;
my $counter_file = $FindBin::Bin . '/cam.csv';
my $lock_file = $FindBin::Bin . '/cam.lock';
my $lock_dir = $FindBin::Bin . '/cam_lock';


Probiers nochmal so.

Gruß Alex\n\n

<!--EDIT|format_c|1087508108-->
Strat
 2004-06-18 22:58
#83543 #83543
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Man kann relative Pfadangaben recht einfach durch CPAN:FindBin in absolute umsetzen lassen, z.B. enthaelt die Variable $FindBin::Bin den Pfad zum aufgerufenen Script...

90% der Probleme, die bei mir mit cronjobs auftreten, sind auf Pfade oder fehlende (oder anders gesetzte) Umgebungsvariablen zurueckzufuehren, deshalb: immer ordentlich Fehler abfangen, Umgebungsvariablen (vor allem Pfade) immer vor der Verwendung ueberpruefen, ...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
steve
 2004-06-19 12:51
#83544 #83544
User since
2004-03-04
52 Artikel
BenutzerIn
[default_avatar]
darf man auch mal fragen, wie die Fehlermeldung aussieht? Btw. wenn du bei cron irgenwas an die Ausgabe sendest z.B. mit deinem Print, dann wird es dir als Mail zugeschickt.

steve
format_c
 2004-06-19 22:25
#83545 #83545
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Die Fehlermeldung wir IMHO wenn das Script per CRON ausgeführt wird in die /var/log/messages geschrieben.

Man kann den Fehler regenerieren, wenn man sich anmeldet:
Code: (dl )
1
2
user@host:~>cd /
user@host:/>/verzeichnis/zum/perl/script.pl
\n\n

<!--EDIT|format_c|1087669553-->
<< >> 6 Einträge, 1 Seite



View all threads created 2004-06-17 19:25.