Perlscript will im cronjob nicht richtig.

Perlscript will im cronjob nicht richtig.

am 30.07.2007 10:21:23 von Ralf Schmidt

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 @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

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 11:17:26 von Johannes Plunien

Hi Ralf,

Ralf Schmidt wrote:

> my $tar_trans = qx "tar @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

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 12:16:27 von Ralf Schmidt

Hallo Johannes,

* Johannes Plunien 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

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 12:22:56 von Markus Merkl

Ralf Schmidt wrote:
> Hallo Johannes,
>
> * Johannes Plunien 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

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 12:41:54 von Ralf Schmidt

Hallo Markus,

* Markus Merkl tippte:
> Ralf Schmidt wrote:
>> Hallo Johannes,
>>
>> * Johannes Plunien 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

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 16:07:35 von Ingo Menger

On 30 Jul., 12:41, Ralf Schmidt 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.

Re: Perlscript will im cronjob nicht richtig.

am 30.07.2007 23:48:34 von Christian Garbs

Mahlzeit!

Ralf Schmidt 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:',y;:;\t;;print;_;_

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

am 31.07.2007 14:54:55 von Ralf Schmidt

* Ralf Schmidt 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 @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