Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

crontab - Skript ruft unter Skripte nicht auf

Empfohlene Antworten

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?

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

Hi,

danke für die Posts.

Also ich hab jetzt überall den VollenPfad angegeben, aber es funkt Trotzdem nicht :-/

Ist denn auch in der crontab das script absolut eingegeben ?

Zeig mal Crontab und das Script...

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

Mach mal am anfang jedes Verzeichnisses ein "/" weil du ja vom Root ausgehen musst ;) Evtl. auch in der Crontab pruefen...

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?!

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

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.

@${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).

Hab ich schon gemacht und der absoluten Pfad wird aufgelöst.

Leider gar keine :(

Der witzt ist, wenn ich das skript händisch ausführe (also nicht über cron) dann funkt das alles.

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

@Joe Kinley

ja immer mit dem gleichen user => root

@Schlaubi

wie mache ich das?

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"

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.