mr_kaktus Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 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.runDann funktioniert das alles wunderabar, muss ich bei der crontab was beachten? Zitieren
Joe Kinley Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 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 ... Zitieren
lordy Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 Du solltest absolute Pfade verwenden, um sicherzustellen, das Cron die "Unterscripte" auch findet Zitieren
mr_kaktus Geschrieben 3. Juli 2006 Autor Geschrieben 3. Juli 2006 Hi, danke für die Posts. Also ich hab jetzt überall den VollenPfad angegeben, aber es funkt Trotzdem nicht :-/ Zitieren
lordy Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 Normalerweise mailt cron die Ausgabe aller Jobs an Ihre jeweiligen Besitzer. Eventuell sind dort Fehlermeldungen (Permission denied, Command not found, etc.) zu finden. Zitieren
charmanta Geschrieben 3. Juli 2006 Geschrieben 3. Juli 2006 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 ) Zitieren
Joe Kinley Geschrieben 4. Juli 2006 Geschrieben 4. Juli 2006 Ist denn auch in der crontab das script absolut eingegeben ? Zeig mal Crontab und das Script... Zitieren
mr_kaktus Geschrieben 4. Juli 2006 Autor Geschrieben 4. Juli 2006 @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" Zitieren
Joe Kinley Geschrieben 4. Juli 2006 Geschrieben 4. Juli 2006 Mach mal am anfang jedes Verzeichnisses ein "/" weil du ja vom Root ausgehen musst Evtl. auch in der Crontab pruefen... Zitieren
mr_kaktus Geschrieben 4. Juli 2006 Autor Geschrieben 4. Juli 2006 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?! Zitieren
Joe Kinley Geschrieben 4. Juli 2006 Geschrieben 4. Juli 2006 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... Zitieren
mr_kaktus Geschrieben 5. Juli 2006 Autor Geschrieben 5. Juli 2006 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. Zitieren
Schlaubi Geschrieben 5. Juli 2006 Geschrieben 5. Juli 2006 @${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). Zitieren
mr_kaktus Geschrieben 5. Juli 2006 Autor Geschrieben 5. Juli 2006 Hab ich schon gemacht und der absoluten Pfad wird aufgelöst. Zitieren
Schlaubi Geschrieben 5. Juli 2006 Geschrieben 5. Juli 2006 Wunderbar und was kommt dann für eine Fehlermeldung vom Cron via Mail? Zitieren
Schlaubi Geschrieben 5. Juli 2006 Geschrieben 5. Juli 2006 Schon mal zu Fuß versucht die sqlplus Kommandozeile auszuführen oder ist dir das nicht möglich? Zitieren
mr_kaktus Geschrieben 5. Juli 2006 Autor Geschrieben 5. Juli 2006 Der witzt ist, wenn ich das skript händisch ausführe (also nicht über cron) dann funkt das alles. Zitieren
Joe Kinley Geschrieben 5. Juli 2006 Geschrieben 5. Juli 2006 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.. Zitieren
Schlaubi Geschrieben 5. Juli 2006 Geschrieben 5. Juli 2006 Du musst eben die beiden Environments (cron und verwendete shell) vergleichen... Zitieren
mr_kaktus Geschrieben 6. Juli 2006 Autor Geschrieben 6. Juli 2006 @Joe Kinley ja immer mit dem gleichen user => root @Schlaubi wie mache ich das? Zitieren
Joe Kinley Geschrieben 6. Juli 2006 Geschrieben 6. Juli 2006 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" Zitieren
Empfohlene Beiträge
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.