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