Perlscript will im cronjob nicht richtig.

Hallo,

ein kleines Perlscript soll per tar ein Verzeichnis durch einen
ssh-Tunnel schicken und auf $remote Rechner ablegen.

Starte ich es auf der Konsole funktioniert es wunderbar. Trage ich den
Startbefehl als cronjob (user root) ein macht das script nicht alles.

my $tar_trans = qx "tar [at] BackupOptions $Loglevel
-f - $configfile{BackupDir}
| $remote 'cat > $configfile{BackupName}_FULL_$BackupTime.tar.gz'";
(Der Befehl steht in einer Zeile)

Bei der Ausführung über den cronsjob wird auf dem Remote-Rechner das
Backupfile angelegt bleibt aber mit 0 Bytes leer.

$remote funktioniert. Das habe ich mit
print qx "$remote touch $configfile{BackupName}.testfile \n\n";
ausprobiert.

Was mache ich hier falsch?

Danke für Eure Tipps.

Gruß
Ralf
Ralf Schmidt [ Mo, 30 Juli 2007 10:21 ] [ ID #1782345 ]

Re: Perlscript will im cronjob nicht richtig.

Hi Ralf,

Ralf Schmidt wrote:

> my $tar_trans = qx "tar [at] BackupOptions $Loglevel
> -f - $configfile{BackupDir}
> | $remote 'cat > $configfile{BackupName}_FULL_$BackupTime.tar.gz'";
> (Der Befehl steht in einer Zeile)

vermutlich ist $PATH im Environment von Cron anders als $PATH von deinem
User mit dem du das Script testest und deshalb kann der CronJob tar
nicht finden. Am besten schreibst du den vollen Pfad zu tar in dein
Perl-Script. Um mal zu schauen, was fuer ein $PATH der Cron hat,
koenntest du sowas wie

* * * * * echo $PATH > /tmp/cronpath

Das alles beruht nur auf einer Vermutung ;-)

Gruesse,
Johannes
Johannes Plunien [ Mo, 30 Juli 2007 11:17 ] [ ID #1782346 ]

Re: Perlscript will im cronjob nicht richtig.

Hallo Johannes,

* Johannes Plunien <plu [at] pqpq.de> tippte:
>
> vermutlich ist $PATH im Environment von Cron anders als $PATH von deinem
> User mit dem du das Script testest und deshalb kann der CronJob tar
> nicht finden. Am besten schreibst du den vollen Pfad zu tar in dein
> Perl-Script. Um mal zu schauen, was fuer ein $PATH der Cron hat,
> koenntest du sowas wie
>
> * * * * * echo $PATH > /tmp/cronpath

Interessant. Die Ausgabe ist leer!
crontab -e zeigt mir

SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
#
* * * * * echo $PATH > cronpath
Auch versucht
* * * * * root echo $PATH > cronpath
oder
* * * * * echo "test" > cronpath

Alles jedesmal mit leerem Ouput.

Ich werde immer Ratloser. ;-(

Gruß
Ralf
Ralf Schmidt [ Mo, 30 Juli 2007 12:16 ] [ ID #1782347 ]

Re: Perlscript will im cronjob nicht richtig.

Ralf Schmidt wrote:
> Hallo Johannes,
>
> * Johannes Plunien <plu [at] pqpq.de> tippte:
>> vermutlich ist $PATH im Environment von Cron anders als $PATH von deinem
>> User mit dem du das Script testest und deshalb kann der CronJob tar
>> nicht finden. Am besten schreibst du den vollen Pfad zu tar in dein
>> Perl-Script. Um mal zu schauen, was fuer ein $PATH der Cron hat,
>> koenntest du sowas wie
>>
>> * * * * * echo $PATH > /tmp/cronpath
>
> Interessant. Die Ausgabe ist leer!
> crontab -e zeigt mir
>
> SHELL=/bin/sh
> PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
> MAILTO=root
> #
> * * * * * echo $PATH > cronpath
> Auch versucht
> * * * * * root echo $PATH > cronpath
> oder
> * * * * * echo "test" > cronpath
^^^^^^^^
> Alles jedesmal mit leerem Ouput.

Im richtigen Verzeichnis nachgesehen? Oder besser, wie oben angegeben
einen kompletten Pfad/Datei angeben und dort die Rechte nicht vergessen!

--
"Perl is the only language that looks the same before and after RSA
encryption." (Keith Bostic)

Markus
Markus Merkl [ Mo, 30 Juli 2007 12:22 ] [ ID #1782348 ]

Re: Perlscript will im cronjob nicht richtig.

Hallo Markus,

* Markus Merkl <markus.merkl [at] gmx.net> tippte:
> Ralf Schmidt wrote:
>> Hallo Johannes,
>>
>> * Johannes Plunien <plu [at] pqpq.de> tippte:
>>> vermutlich ist $PATH im Environment von Cron anders als $PATH von deinem
>>> User mit dem du das Script testest und deshalb kann der CronJob tar
>>> nicht finden. Am besten schreibst du den vollen Pfad zu tar in dein
>>> Perl-Script. Um mal zu schauen, was fuer ein $PATH der Cron hat,
>>> koenntest du sowas wie
>>>
>>> * * * * * echo $PATH > /tmp/cronpath
>>
>> Interessant. Die Ausgabe ist leer!
>> crontab -e zeigt mir
>>
>> SHELL=/bin/sh
>> PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
>> MAILTO=root
>> #
>> * * * * * echo $PATH > cronpath
>> Auch versucht
>> * * * * * root echo $PATH > cronpath
>> oder
>> * * * * * echo "test" > cronpath
> ^^^^^^^^
>> Alles jedesmal mit leerem Ouput.
>
> Im richtigen Verzeichnis nachgesehen? Oder besser, wie oben angegeben
> einen kompletten Pfad/Datei angeben und dort die Rechte nicht vergessen!

Ja, hab ich. Die Datei landet jedesmal im /root Dir.
Ich habe alle 3 Möglichkeiten nacheinander durchprobiert.

Eben habe ich mir die Mails mal angesehen die an root gesendet wurden.
Steht im crontab
* * * * * root echo $PATH > cronpath

bekomme ich in der Mail
/bin/sh: root: command not found

Scheinbar war "root" zuviel
Jetzt habe ich den crontab auf
* * * * * echo $PATH > cronpath
geändert und siehe da nun steht in der cronpath-datei
/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
Wieso das eben nicht funktioniert hat kann ich nicht sagen.


Im Perlscript habe ich es probeweise mit "/bin/tar" versucht. Das
Ergebnis bleibt das selbe.


Gruß
Ralf
Ralf Schmidt [ Mo, 30 Juli 2007 12:41 ] [ ID #1782349 ]

Re: Perlscript will im cronjob nicht richtig.

On 30 Jul., 12:41, Ralf Schmidt <t... [at] epostbox.eu> wrote:

> Im Perlscript habe ich es probeweise mit "/bin/tar" versucht. Das
> Ergebnis bleibt das selbe.

Sinnvoll ist in solchen Fällen sowas wie '2>/tmp/err.$$' an die
Kommandozeile anzuhängen. Eigentlich sollte Dir der cron-Dämon aber
eine Mail schicken, wenn die Standardfehlerausgabe nicht leer ist.
Ingo Menger [ Mo, 30 Juli 2007 16:07 ] [ ID #1782351 ]

Re: Perlscript will im cronjob nicht richtig.

Mahlzeit!

Ralf Schmidt <tux [at] epostbox.eu> wrote:

> Wieso das eben nicht funktioniert hat kann ich nicht sagen.

Kein abschließender Zeilenumbruch? Dann ignoriert cron die letzte
Zeile der crontab.

Gruß,
Christian
--
sub _{print"\n"}_;for(;$s<9;++$s){$_='1E2018201E00001E2018201E00001E2018201'
..'E002020001C2222221400005CA2A2A27C02001C2222221C20003E0402 02201F2422221C00'
..'242A2A2A12002020001C2222221F20001C2A2A2A0C';while(s;(..); ;){printf'%c',hex
$1&1<<$s?40:32}_}$_=':::Christian Garbs:<mitch [at] cgarbs.de>',y;:;\t;;print;_;_
Christian Garbs [ Mo, 30 Juli 2007 23:48 ] [ ID #1782354 ]

[SOLVED] Re: Perlscript will im cronjob nicht richtig.

* Ralf Schmidt <tux [at] epostbox.eu> tippte:
> Starte ich es auf der Konsole funktioniert es wunderbar. Trage ich den
> Startbefehl als cronjob (user root) ein macht das script nicht alles.
>
> my $tar_trans = qx "tar [at] BackupOptions $Loglevel
> -f - $configfile{BackupDir}
> | $remote 'cat > $configfile{BackupName}_FULL_$BackupTime.tar.gz'";
> (Der Befehl steht in einer Zeile)

> Bei der Ausführung über den cronsjob wird auf dem Remote-Rechner das
> Backupfile angelegt bleibt aber mit 0 Bytes leer.

Der Fehler lag in dem configfile das im ersten Eintrag einen Tippfehler
beim Verzeichnisnamen enthielt. Dadurch brach das Script ab und schrieb
nur eine 0-Byte-Datei.

Vielen Dank für Eure Hilfe!

Gruß
Ralf
Ralf Schmidt [ Di, 31 Juli 2007 14:54 ] [ ID #1783324 ]
Perl » de.comp.lang.perl.misc » Perlscript will im cronjob nicht richtig.

Vorheriges Thema: awk2perl
Nächstes Thema: Perl Tk: mehrere Dialogboxen von Mainwindow Steuern