Schrift
[thread]8162[/thread]

Perl Script mit CRON Job, Problem bei use...



<< >> 8 Einträge, 1 Seite
Gast Gast
 2006-07-12 18:57
#68076 #68076
Hallo,
ich möchte ein Perl-Script per CRON regelmäßig ausführen lassen.

- Das Script kann ich via Shell ausführen, es funktioniert da einwandfrei.
- Ich kann Perl Scripte via CRON "ausführen".

Das Problem tritt dann auf, wenn ich bestimmte Module verwende. Ich habe ein ganz einfaches Script geschrieben, um mein Problem zu zeigen.


Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w

use strict;
use FileHandle();
use POSIX qw(locale_h strftime);

my $cmd="touch /pfad/zu/einer/datei";
my $out = `$cmd`;


Wie man sieht, ändere ich mit dem touch Befehl das Datum einer Datei. Wie gesagt, das funktioniert. Wenn ich nun ein use DBI; hinzufüge, funktioniert das ganze nicht mehr.

Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w

use strict;
use FileHandle();
use POSIX qw(locale_h strftime);
use DBI;

my $cmd="touch /pfad/zu/einer/datei";
my $out = `$cmd`;


Alle hier genannten Module sind standardmäßig installiert. Was ebenfalls nicht funktioniert ist das EInbinden von eigenen Modulen in einer extra CPAN Bibliothek.


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w

use strict;
use FileHandle();
use POSIX qw(locale_h strftime);

BEGIN {
unshift(@INC,"/pfad/zur/cpan/lib/");
}
use HTML::Entities;
# alternativ use HTML::Entities "/pfad/zur/cpan/lib/";

my $cmd="touch /pfad/zu/einer/datei";
my $out = `$cmd`;



Der Aufruf in der CRONTAB erfolgt z.B. mit
* * * * * perl /pfad/zum/script/touch.pl
aber diese Information ist sicher irrelevant, denn das funktioniert ja prinzipiell.

Ich hoffe, dass mir jemand weiterhelfen kann, denn ich komme da nun gar nicht mehr weiter. Das ganze probiere ich unter SunOS 5.8.
Crian
 2006-07-12 19:22
#68077 #68077
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Deine Umgebung ist eine andere, wenn der Job über cron läuft.

Zu den Modulen ist FindBin dein Freund:

Code: (dl )
1
2
use lib $FindBin::RealBin . '/modules';
use My::Module;
\n\n

<!--EDIT|Crian|1152717896-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2006-07-12 19:36
#68078 #68078
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Fehlermeldungen kommen denn??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Franz
 2006-07-12 20:16
#68079 #68079
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
Hallo,
Ist FindBin tatsächlich ein Ansatz?
Denn es wird ja das Modul FileHandle(); beispielsweise gefunden - das Script läuft durch. Nur z.B. DBI; per use eingebunden scheitert wohl. Ich würde also annehmen, dass das kein Problem ist, oder? Auch gebe ich den Pfad in dem beispiel mit HTML::Entities absolut an und dieser ist korrekt.

Ich kann leider keine Fehlermeldungen liefern, da ich nur eingeschränkte Benutzerrechte besitze. Gesucht hätte ich in /var/cron/log. EMails von CRON landen bei einer anderen Person. Da laufen aber anscheinend keine mit Fehlermeldungen zu dem Script auf.
pq
 2006-07-12 20:19
#68080 #68080
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
es ist nicht unwahrscheinlich, dass auf der maschine 2 perl-versionen
rumliegen - beispielsweise in /usr/bin/perl und /usr/local/bin/perl.
wenn du mal beide versionen mit -MDBI -e1 aufrufst, siehst du,
welche DBI installiert hat und welche nicht.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2006-07-13 12:15
#68081 #68081
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn du die Cron-Mails umleiten kannst/willst, dann kannst du in der crontab die Variable MAILTO entsprechend setzen.
Crian
 2006-07-13 14:09
#68082 #68082
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
[quote=Franz,12.07.2006, 18:16]Ist FindBin tatsächlich ein Ansatz?[/quote]

Ja, und zwar bezogen auf

[quote=Franz,12.07.2006, 16:57]Was ebenfalls nicht funktioniert ist das EInbinden von eigenen Modulen[/quote]
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Franz
 2006-07-13 15:28
#68083 #68083
User since
2006-07-12
31 Artikel
BenutzerIn
[default_avatar]
@all danke für die Rückmeldungen!

@pq besonders dir vielen Dank!!!

Das Problem lag tatsächlich in dem vorhanden sein von mehreren perl Versionen. Der Aufruf der Perl-Versionen mit -MDBI und -e1 der mit (find / -name perl 2>/dev/null) gefunden Versionen ergab den beschriebenen effekt. Einmal ist DBI vorhanden einmal nicht....

Mit #!/usr/local/bin/perl -w und dem Aufruf /usr/local/bin/perl script.pl funktioniert es nun! :)\n\n

<!--EDIT|Franz|1152790148-->
<< >> 8 Einträge, 1 Seite



View all threads created 2006-07-12 18:57.