Zum Inhalt springen

crontab - Skript ruft unter Skripte nicht auf


Empfohlene Beiträge

Geschrieben

Hi @all,

ich hab ein Skript geschrieben, der einwandfrei Funktioniert.

Wenn ich ihn Händisch Starte, dann läuft er durch, wenn ich ihn aber über die Crontab laufen lasse, dann funkioniert das nicht?!

Das Skript ist von der Logik wie Folgt aufgebaut:

skript01.run:


Variable=WERT

Variable=WERT

Variable=WERT


#Aufruf Unter-Skripte

./script02.run

./script03.run

./script04.run

./script05.run
Wenn ich mir die /var/log/messages anschaue, dann sehe ich, dass das skript skript01.run aufgerufen wurde, aber es werden keine Dateien angelgt. Wenn ich aber das Skript skript01.run händisch aufrufe
./skript01.run

Dann funktioniert das alles wunderabar, muss ich bei der crontab was beachten?

Geschrieben

Das Problem ist, dass du in der Crontab die Absoluten Pfadangaben machen musst. Denn es ist ja nicht in dem Verzeichnis in dem auch dein Script steckt.

Wenn es dann aufgerufen wird ist auch nicht sicher in welchem Verzeichnis nun das ./ eigentlich liegt.

Also: Mach am besten Absolute Pfadangaben (am besten mit ner Variable) und fuehr das Script dann absolut in der Crontab auf ...

Geschrieben

ohne die Scripte komplett zu sehen kann man das nicht eindeutig sagen. Ich habe unter Suse selbst einige Scripte gefunden, die im Direktaufruf laufen und die im Cronbetrieb auf die Nase fallen ( z.b. die test -z Abfragen )

Geschrieben

@charmanta

Du hast recht, deswegen poste ich das Skript hier mal.

Ich hab es jetzt alles in einem Skript gelegt, aber es funkt immer noch nicht :( Lag doch irgenwie nicht an den Unterprogrammen :(

@Joe Kinley

Ja in der Crontab Stimmt der eintrag.

Hier das Skript (Bitte nicht über das Skript urteilen, ich weiß man kann vieles anders Lösen, ist nicht mein Skript, ich muss nur schauen warum es nicht mit Cron Läuft):

verz='wiw_test'

dsn_prot='prot_zeit.txt'

dsn_crtb_wiw='prot_crtb_wiw.log'

dsn_crtb_wiw_fehl='prot_crtb_wiw_fehl.log'

dsn_ldr_wiw='prot_ldr_wiw.log'

dsn_ldr_wiw_fehl='prot_ldr_wiw_fehl.log'

dsn_crvw='prot_crvw.log'

dsn_crvw_sc='prot_crvwsc.log'

dsn_crvw_fehl='prot_crvwfehl.log'

dsn_updtb01='prot_updtb01.log'


ddprot="${verz}${dsn_prot}"

crtb_wiw="${verz}${dsn_crtb_wiw}"

crtb_wiw_fehl="${verz}${dsn_crtb_wiw_fehl}"

ldr_wiw="${verz}${dsn_ldr_wiw}"

ldr_wiw_fehl="${verz}${dsn_ldr_wiw_fehl}"

crvw="${verz}${dsn_crvw}"

crvw_sc="${verz}${dsn_crvw_sc}"

crvw_fehl="${verz}${dsn_crvw_fehl}"

updtb01="${verz}${dsn_updtb01}"




echo ' ' > nohup.out

echo ' ' > "$ddprot"




if [[ "$HOSTNAME" = "pluto" ]]; then echo "hostname = linux Test Alpha" >> "$ddprot" ;  fi

if [[ "$HOSTNAME" = "mars"  ]]; then echo "hostname = linux Test Beta"       >> "$ddprot" ;  fi

ZTXT="servername ermitteln fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"


 DATE=$(date +%y%m%d_%H%M)


ZTXT='daten vom rechner holen'

$verz/script_zeit_start.run "$ZTXT" "$ddprot"


nohup scp -i /home/username/.ssh/private_key scp_inca@192.168.2.82:daten.txt  danten_$DATE.csv

ZTXT="daten vom rechner holen fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"



ZTXT="kopieren"

$verz/script_zeit_start.run "$ZTXT" "$ddprot"

cp wiw_data_$DATE.csv  wiw_data.csv

ZTXT="kopieren fertig"

$verz/script_zeit_stop.run  "$ZTXT" "$ddprot"


rm wiw_data_$DATE.csv



ZTXT="perl: daten kontrollieren und aufbereiten"

$verz/script_zeit_start.run "$ZTXT"  "$ddprot"

perl    $verz/script_wiw_chkdata.pl      wiw_data.csv

ZTXT="perl: daten kontrollieren und aufbereiten fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"





ZTXT="protokolldaten zusammenkopieren"

 $verz/script_zeit_start.run "$ZTXT"  "$ddprot"

 cat     $verz/fehlprot01_pnr.txt        >  temp_all.txt

 cat     $verz/fehlprot02_name.txt       >> temp_all.txt

 cat     $verz/fehlprot03_prename.txt    >> temp_all.txt

 cat     $verz/fehlprot04_es_lc.txt      >> temp_all.txt

 cat     $verz/fehlprot08_email.txt      >> temp_all.txt

 cat     $verz/fehlprot09_tel.txt        >> temp_all.txt

 cat     $verz/fehlprot10_bk.txt         >> temp_all.txt

 cat     $verz/fehlprot11_kost.txt       >> temp_all.txt

 cat     $verz/fehlprot12_bs_lc.txt      >> temp_all.txt

 cat     $verz/fehlprot16_org_resp.txt   >> temp_all.txt

 cat     $verz/fehlprot17_org_id1.txt    >> temp_all.txt

 cat     $verz/fehlprot18_org_name1.txt  >> temp_all.txt

 cat     $verz/fehlprot19_org_id2.txt    >> temp_all.txt

 cat     $verz/fehlprot20_org_name2.txt  >> temp_all.txt

 cat     $verz/fehlprot21_sex.txt        >> temp_all.txt

 cat     $verz/fehlprot22_anrede.txt     >> temp_all.txt

ZTXT="protokolldaten zusammenkopieren fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"



wc -l    $verz/temp_all.srt         >> "$ddprot"



ZTXT="perl: summieren"

$verz/script_zeit_start.run "$ZTXT"  "$ddprot"

perl    $verz/script_wiw_sumdata.pl     $verz/temp_all.srt

ZTXT="perl: summieren fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"

wc -l    $verz/temp_all.srt         >> "$ddprot"

wc -l    $verz/fehlprot00_all.txt   >> "$ddprot"



PATH=$PATH:/opt/oracle/app/oracle/OraHome_1/bin

export ORACLE_HOME=/opt/oracle/app/oracle/OraHome_1

export ORACLE_SID=RMS




ZTXT="table anlegen"

$verz/script_zeit_start.run "$ZTXT"  "$ddprot"

nohup /opt/oracle/app/oracle/OraHome_1/bin/sqlplus wiw/wiw    \@$verz/gen_wiw       log=$crtb_wiw

ZTXT="table anlegen fertig"

$verz/script_zeit_stop.run  "$ZTXT"  "$ddprot"

Geschrieben

Hab ich gemacht, jetzt tut es auch ! THX.

Jetzt habe ich ein weitere Prob, wie ihr oben Vielleicht sehen könnt, wird da ein Perl Skript aufgerufen. Dieser Skript soll Dateien anlegen und füllen.

Die Dateien werden angelegt, aber nicht gefüllt. Hier ist das gleiche Prob, wenn ich es Über Cron aufrufe, geht es nicht aber wenn ich es Händisch aufrufe funkt es! Was muss ich Perl mit geben? Hier ist mal das Skript:

 

    $kreut = "tkreutler_200605" ;



 #  Datum in richtigen format erstellen


    ($s59,$m59,$h24,$d2,$m2,$y2,$wday,$doy,$isdst) = localtime(time) ;

    $y4   = $y2  + 1900 ;

    $y2   = $y2  -  100 ;

    $m2   = $m2  +    1 ;

    $doy  = $doy +    1 ;

    $dow  = (So,Mo,Di,Mi,Do,Fr,Sa) [(localtime) [6]] ;

    $m3   = (jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec) [(localtime) [4]] ;


    if (length($y2) eq 1 ) { $y2 = "0$y2" } ;

    if (length($m2) eq 1 ) { $m2 = "0$m2" } ;

    if (length($d2) eq 1 ) { $d2 = "0$d2" } ;


    if (length($h24) eq 1 ) { $h24 = "0$h24" } ;

    if (length($m59) eq 1 ) { $m59 = "0$m59" } ;

    if (length($s59) eq 1 ) { $s59 = "0$s59" } ;


    $nowtime        = "$h24:$m59:$s59" ;


    $dot_y4m2       = "$y4.$m2.$d2" ;

    $dot_y2m2       = "$y2.$m2.$d2" ;

    $dot_y4t        = "$dot_y4m2 $nowtime" ;

    $dot_y2t        = "$dot_y2m2 $nowtime" ;


    $min_y4m2       = "$y4-$m2-$d2" ;

    $min_y4m3       = "$y4-$m3-$d2" ;


    $now            = $min_y4m3 ;


 #   nowcompact wird in Tablename verwendet und darf keinen Punkt oder Doppelpunkt enthalten

    $nowcompact     = "${y2}${m2}${d2}_${h24}${m59}" ;


 #  Dateihandling


    open crtb01,    '>/cust/wiw/gen_wiw.sql'           ;

    open crtb02,    '>/cust/wiw/gen_wiw_fehl.sql'      ;

    open loa,       '>/cust/wiw/gen_wiw.loa'           ;

    open ctl,       '>/cust/wiw/gen_wiw.ctl'           ;

    open ctl2,      '>/cust/wiw/gen_wiw_fehl.ctl'      ;

    open crvw,      '>/cust/wiw/gen_wiw_crvw.sql'      ;

    open crvw_sc,   '>/cust/wiw/gen_wiw_crvw_sc.sql'   ;

    open crvw_fehl, '>/cust/wiw/gen_wiw_crvw_fehl.sql' ;

    open updtb01,   '>/cust/wiw/gen_wiw_updtb01.sql'   ;


    open prot,      '>/cust/wiw/prot.txt'                 ;

    open protr01,   '>/cust/wiw/fehlprot01_pnr.txt'       ;

    open protr02,   '>/cust/wiw/fehlprot02_name.txt'      ;

    open protr03,   '>/cust/wiw/fehlprot03_prename.txt'   ;

    open protr04,   '>/cust/wiw/fehlprot04_es_lc.txt'     ;

 #   open protr05,   '>/cust/wiw/fehlprot05_es_plz.txt'    ;

 #   open protr06,   '>/cust/wiw/fehlprot06_es_ort.txt'    ;

 #   open protr07,   '>/cust/wiw/fehlprot07_es_str.txt'    ;

    open protr08,   '>/cust/wiw/fehlprot08_email.txt'     ;

    open protr09,   '>/cust/wiw/fehlprot09_tel.txt'       ;

    open protr10,   '>/cust/wiw/fehlprot10_bk.txt'        ;

    open protr11,   '>/cust/wiw/fehlprot11_kost.txt'      ;

    open protr12,   '>/cust/wiw/fehlprot12_bs_lc.txt'     ;

 #   open protr13,   '>/cust/wiw/fehlprot13_bs_plz.txt'    ;

 #   open protr14,   '>/cust/wiw/fehlprot14_bs_ort.txt'    ;

 #   open protr15,   '>/cust/wiw/fehlprot15_bs_str.txt'    ;

    open protr16,   '>/cust/wiw/fehlprot16_org_resp.txt'  ;

    open protr17,   '>/cust/wiw/fehlprot17_org_id1.txt'   ;

    open protr18,   '>/cust/wiw/fehlprot18_org_name1.txt' ;

    open protr19,   '>/cust/wiw/fehlprot19_org_id2.txt'   ;

    open protr20,   '>/cust/wiw/fehlprot20_org_name2.txt' ;

    open protr21,   '>/cust/wiw/fehlprot21_sex.txt'       ;

    open protr22,   '>/cust/wiw/fehlprot22_anrede.txt'    ;



 #  Protokoll ueberschriften

    printf prot    "                                     \n" ;

    printf protr01 "#username;PNR;                        \n" ;

    printf protr02 "#username;;Name;                       \n" ;

    printf protr03 "#username;;;Prename;                    \n" ;

    printf protr04 "#username;;;;es_lc;es_plz;es_ort;es_str; \n" ;

    printf protr08 "#username;;;;;;;;email;                      \n" ;

    printf protr09 "#username;;;;;;;;;tel;                        \n" ;

    printf protr10 "#username;;;;;;;;;;bk;                         \n" ;

    printf protr11 "#username;;;;;;;;;;;kost;                       \n" ;

    printf protr12 "#username;;;;;;;;;;;;bs_lc;bs_plz;bs_ort;bs_str; \n" ;

    printf protr16 "#username;;;;;;;;;;;;;;;;resp_id;                    \n" ;

    printf protr17 "#username;;;;;;;;;;;;;;;;;org_id1;                    \n" ;

    printf protr18 "#username;;;;;;;;;;;;;;;;;;org_name1;                  \n" ;

    printf protr19 "#username;;;;;;;;;;;;;;;;;;;org_id2;                    \n" ;

    printf protr20 "#username;;;;;;;;;;;;;;;;;;;;org_name2;                  \n" ;

    printf protr21 "#username;;;;;;;;;;;;;;;;;;;;;sex;                        \n" ;

    printf protr22 "#username;;;;;;;;;;;;;;;;;;;;;;anrede;                     \n" ;


 #  Initialwerte

    $lfd         =  1    ;

    $usernamesav =  ""   ;

    $s13         =  ""   ;


[...]


Es wrden die Dateien geöfnet aber es wird nichts rein geschrieben?!

Geschrieben

evtl. hats da was mit den Rechten zu tun (wobei die Crontab das als der User macht, mit dem du angemeldet bist glaub ich).

Versuch mal die Dateien mit 777 anzulegen ob es dann klappt...

Ansonsten ist das schwer zu sagen... vielleicht auch wieder so ein Absolut-Pfad-Problem... ich seh leider nicht wo dein Perl Script aufgerufen wird...

Geschrieben

Hi,

oh mann ich hab gestern gesucht sag ich euch.

Das ist ein riesen Perlskript und lag auch der Fehler, der User hat da wieder mal die Absoluten Pfade vergessen. Jetzt Funktioniert alles bis auf das Beladen der Datenbank.

 nohup /opt/oracle/app/oracle/OraHome_1/bin/sqlplus user/passwort    @${verz}/gen_wiw       log=$crtb_wiw

Kann es Sein, dass das @zeichen Maskiert werden muss? Leider habe ich kein Plan wie das mit dem SQLPlus funkt.

Geschrieben
@${verz}/gen_wiw
Nein, muss es IMHO nicht, aber auch hier tippe ich wieder auf "den absoluten Pfad" nicht eingetragen, überprüf das doch bitte mal (also ob der vollständige Pfad des sql-Skriptes namens "gen_wiw" angegeben ist).
Geschrieben

MAchst du das auch mit dem gleichen Nutzer? Oder wird das Script mit einem anderen User getestet von dir?

Andernfalls muesstest du ein Sudo auf diesen befehl machen oder dem crontab user auch die noetigen rechte geben..

Geschrieben

schau bei den cron confs mit welcher shell da gestartet wird.... also schauen welchen crondaemon du hast... und dann schaun welche conf datei es da gibt.. und dann einfach aendern... ODER direkt im Cronjob machen mit "/bin/bash /path/to/cronfile"

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...