Schrift
[thread]8255[/thread]

Problem mit -w und Perl-Skript als Cron-Job

Leser: 1


<< >> 6 Einträge, 1 Seite
nepos
 2006-08-22 12:40
#69077 #69077
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo ihr!

Ich habe folgendes Problem: ein Perl-Skript, das Dateien auf einen Samba-Mountpoint syncen soll, laeuft von der Shell aus gestartet einwandfrei durch.
Wenn das gleiche Skript allerdings per Cron gestartet wird, schlaegt der Check -w auf ein Verzeichnis fehl, obwohl das Skript in der root-Crontab eingetragen ist und somit als User root laeuft.
Woran koennte das liegen? Muss ich statt -w besser -W benutzen?
Ich bin hier im Moment echt ein wenig ratlos...
Danke fuer eure Hilfe!

Ciao,
Nepos
pq
 2006-08-22 13:31
#69078 #69078
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wie sieht der eintrag in der crontab aus? normalerweise muss man da
ja auch den user mit angeben, mit dem das skript gestartet werden soll.
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
betterworld
 2006-08-22 13:32
#69079 #69079
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Zeig mal die Crontab und ein kleines Script, das den Fehler reproduziert. Sag mal die genauen Permissions von dem Verzeichnis und evtl. den uebergeordneten Verzeichnissen. Lass das Script mal $< und $> ausgeben.

Quote
laeuft von der Shell aus gestartet einwandfrei durch
Auch wenn es als root gestartet wird?
nepos
 2006-08-22 13:48
#69080 #69080
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ok, die Sache wird immer komischer. Folgender kleiner Code-Ausschnitt:
Code (perl): (dl )
1
2
3
4
5
6
      my $test = -W "$INTRANETDIRPDF/$relativePath";

      print "Test returned: ", Dumper(\$test),"\n" if $DEBUG;

      warn BOLD, RED, "Verzeichnis \"$INTRANETDIRPDF/$relativePath\" nicht beschreibbar!"
        unless ( $test ), RESET;


Wenn das Skript via root-Crontab aufgerufen wird, liefert die Ausgabe von Dumper:
Code: (dl )
Test returned: $VAR1 = \'1';

Das heisst, der Test war erfolgreich, das Verzeichnis ist beschreibbar.
Gleichzeitig wird allerdings auch das warn() ausgefuehrt...

Starte ich das ganze als root auf der Konsole, dann kriege ich die gleiche Ausgabe von Dumper, allerdings springt das warn nicht an...

Ein
Code: (dl )
ls -la /Berichte/SLA-2.5/pdf/2006
liefert mir:
Code: (dl )
1
2
3
4
5
6
7
8
9
drwxrwxr-x    1 root     reportin     4096 Aug 11 10:25 .
drwxrwxr-x    1 root     reportin     4096 Feb 15  2006 ..
drwxrwxr-x    1 root     reportin     4096 Apr 20 15:22 01
drwxrwxr-x    1 root     reportin     4096 Mar 28 16:28 02
drwxrwxr-x    1 root     reportin     4096 Apr 27 12:58 03
drwxrwxr-x    1 root     reportin     4096 Jul 17 15:48 04
drwxrwxr-x    1 root     reportin     4096 Aug 11 10:25 05
drwxrwxr-x    1 root     reportin     4096 Jul 21 15:09 06
drwxrwxr-x    1 root     reportin     4096 Aug 11 10:25 07


Das Verzeichnis befindet sich auf einem Mountpoint, der per Samba von einem anderen Server eingebunden wird. Dabei wird die fmask auf 0664, die dmask auf 0775 und die gid auf 101 (reporting) gesetzt. Sprich, alle Dateien und Verzeichnisse unter diesem Mountpoint haben die gleichen Berechtigungen und Besitzer/Gruppe.

@pq: Die Angabe des Users benoetigt man nur, wenn man den Job ueber die /etc/cron... eintraegt. Wenn ich den Job direkt als root mittels
Code: (dl )
crontab -e
anlege, wird er in die root-Crontab geschrieben und dort ausgefuehrt.
pq
 2006-08-22 14:51
#69081 #69081
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nepos,22.08.2006, 11:48]
Code (perl): (dl )
1
2
      warn BOLD, RED, "Verzeichnis \"$INTRANETDIRPDF/$relativePath\" nicht beschreibbar!"
        unless ( $test ), RESET;
[/quote]
was soll denn das für ein konstrukt sein?
hier zeigt sich mal wieder, wie wichtig warnings sind.
"Useless use of a variable in void context"

foo() unless ($x), $y
wird zu
foo() unless $x, $y;
da unless eine bedingung erwartet, wird $x, $y im skalaren kontext
ausgewertet und das $x ignoriert. es wird also das $y (bei dir RESET, was
immer das auch ist) ausgewertet.
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-08-22 14:56
#69082 #69082
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Joa, hab ich mittlerweile auch gemerkt :(
Saubloeder Fehler... Das RESET steht nun an der richtigen Stelle und es funktioniert...
RESET ist btw aus CPAN:Term::ANSIColor. Ich benutze es, um bestimmte Teile der Ausgabe farbig zu machen.

Trotzdem ein Danke an alle, die zu helfen versucht haben :)\n\n

<!--EDIT|nepos|1156244236-->
<< >> 6 Einträge, 1 Seite



View all threads created 2006-08-22 12:40.