[solved]-->Cronjob != händlische Ausführung (Debian)

  • Morgen @all,


    habe ein komisches Phänomen.
    Ich habe einen Cronjob zum Umwandeln in MPEG4, den ich per Eintrag in /etc/crontab automatisch ausführen lasse.

    Code
    ##Umwandlung in MPEG4
    2,22,42                 *       * * *           root    /etc/skripte/convertmpeg4.sh

    convertmpeg4.sh:

    Der Cronjob rattert das Skript jedoch nur schnell durch und setzt mp4 auf '1':

    Code
    Do Mär 31 08:22:01 CEST 2005 ---> Convert granted <---

    Wenn ich dieses Skript nun per Hand ausführe, funktioniert es:

    Code
    Do Mär 31 08:22:31 CEST 2005--------Start MPEG4 -----------
    Do Mär 31 08:22:31 CEST 2005 - Start First Pass for /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:22:31 CEST 2005 - /etc/skripte/1st_mpeg4.sh /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:24:20 CEST 2005 - End First Pass for /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:24:20 CEST 2005 - Start Second Pass for /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:24:20 CEST 2005 - /etc/skripte/2nd_mpeg4.sh /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:26:08 CEST 2005 - End Second Pass for /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg
    Do Mär 31 08:26:08 CEST 2005 - Move /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mp4 to Raid
    Do Mär 31 08:26:12 CEST 2005 - UPDATE DB WITH size=41421964 AND mp4=1 WHERE id=1333
    Do Mär 31 08:26:12 CEST 2005--------End MPEG4 /data/mpg/ZDF-Morgenmagazin_5min-test-2005-03-31-1333.mpg-----------

    So, hab ich noch was vergessen.... Glaube nich...
    Was soll das.... :rolleyes:


    Greetz

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Bau mal ein "env" ein und vergleich das Environment.
    Vermutlich sind ein paar Programme nicht im Pfad die Du in
    den aufgerufenen Scripts verwendest.


    --Stefan


    PS: wenn Du die Execute Bits von /etc/skripte/1st_mpeg4.sh
    und Co richtig setzt brauchst Du "sh" nicht davor -- wir sind
    ja nicht unter Windows ;)

    Produktiv: Kubuntu Breezy, Sempron 64 2800+ im 64bit Modus, 1GB, 2x200GB+120GB Seagate, DVB-S: Nexus 2.6 und Nova
    Test: Kubuntu Breezy, AMD64 3200+ im 64bit Modus, 2GB, 250GB Seagate SATA, DVB-S: Nova Plus

  • Das werd ich nach der laufenden Umwandlung mal testen...


    Thx


    zu PS: Ist mir bewusst, dachte ich probier es mal aus. :D

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

  • Schreib mal ein paar cho-Zeilen dazu und logge die Ausgaben der Befehle mit:

    Code
    ...
    echo "Bin jetzt in Zeile xy">>logfile
    ...
    mysql -h xxxxxxxxxxx>>logfile
    ...
    echo "Und jetzt hier.">>logfile
    ...


    Bzw. die Fehlerumleitung &>.


    Vermute aber auch, daß es an Pfaden liegt. Insbesondere wird wohl der mysql-Befehl nicht gefunden/ abgearbeitet. Viel Erfolg.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • knebb gute Idee, geht aber viel einfacher: set -x
    Dann werden alle ausgeführten Befehle ausgegeben.
    Wieder ausschalten mit: set +x

    Produktiv: Kubuntu Breezy, Sempron 64 2800+ im 64bit Modus, 1GB, 2x200GB+120GB Seagate, DVB-S: Nexus 2.6 und Nova
    Test: Kubuntu Breezy, AMD64 3200+ im 64bit Modus, 2GB, 250GB Seagate SATA, DVB-S: Nova Plus

  • knebb
    Auch ne gute Idee... mom


    Stefan_T
    Die beiden Ausgaben sind unterschiedlich:
    Cronjob:

    Code
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
    PWD=/root 
    LANG=de_DE@euro 
    HOME=/root 
    SHLVL=2 
    LOGNAME=root 
    _=/usr/bin/env

    Zu Fuss:

    Einmal root lokal, einmal per ssh... (Könnte ein Gedichtsvers sein..)
    soweit kann ich da geistig nachlatschen...:D


    EDIT: "set -x >> log" oder werden die dann ins syslog/messages geschrieben?

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    3 Mal editiert, zuletzt von kniepbert ()

  • [quote]Original von eisenbert
    Cronjob:

    Code
    SHELL=/bin/sh

    Zu Fuss:

    Code
    SHELL=/bin/bash


    Könnte wohl sein, daß Du bash- Befehle verwendest, die in der einfachen sh nicht enthalten sind? Hab' jetzt nicht genauer geprüft, aber ist durchaus möglich. Unter Suse ist zwar die /bin/sh auf /bin/bash gelinkt, ob das aber unter Debian so ist?


    Stefan_T
    Danke, wieder mal was gelernt, werde ich demnächst mal testen.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Oha...


    Erst mal das "set -x" von Stefan_T.. (jetzt wisssen wir auch wie der Debug-Mod von vdrconvert funktioniert)
    Zuf Fuss:

    Code
    schnipp
    Mir ist irgendwie nich wohl bei dem Gedanken das Herz hier so offen liegen zu lassen... Bei Bedarf.

    Wie bekomme ich das denn beim Cronjob hin? "set -x >> log"

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    2 Mal editiert, zuletzt von kniepbert ()

  • Wobei es wohl an dem bash/sh liegt, oder?


    Bin jetzt aber ein wenig verwirrt... :rolleyes:
    Es ist doch eigentlich ein sh-Skript, somit müsste doch der Cronjob besser ausgeführt werden.
    Wo hab ich denn das Shell-Skript-Buch.... *such*

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

  • Zitat

    Original von eisenbert
    Es ist doch eigentlich ein sh-Skript, somit müsste doch der Cronjob besser ausgeführt werden.
    Wo hab ich denn das Shell-Skript-Buch.... *such*


    Wieso besser?
    Da Du in dem Skript nicht in der ersten Zeile mit

    Code
    !#/bin/bash

    angegeben hast, welche Shell verwendet werden soll, nimmt er die Standardshell.


    Und das ist beim Direktaufruf eben /bin/bash und beim cron /bin/sh. Hast Du mal geprüft, ob das evtl. doch ein Link (und damit dasselbe) ist?


    Mit den Aufrufen innerhalb des Skriptes nimmt er so oder so /bin/sh.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Hallo eisenbert,


    Zitat

    Original von eisenbert
    Wie bekomme ich das denn beim Cronjob hin?


    Die Ausgabe eines Cron-Jobs wird Dir (wenn Du nichts anderes angegeben hast) per eMail zugestellt.


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • STDOUT / STDERR auf ein File umleiten geht in einem Script so:


    Bash
    #!/bin/bash
    
    
    exec >test.log 2>&1
    
    
    set -x # zum Beispiel
    ls
    echo "....undsoweiter..."

    Produktiv: Kubuntu Breezy, Sempron 64 2800+ im 64bit Modus, 1GB, 2x200GB+120GB Seagate, DVB-S: Nexus 2.6 und Nova
    Test: Kubuntu Breezy, AMD64 3200+ im 64bit Modus, 2GB, 250GB Seagate SATA, DVB-S: Nova Plus

    Einmal editiert, zuletzt von Stefan_T ()

  • >test.log 2>&1 funktioniert auch in der crontab


    also z.b. * * * * * user prg.sh > /path/tp/test.log 2>&1


    Be Cron sollte man immer beachten, dass man nicht die komplette Umbegung (siehe env oben) hat. Teilweise werden Programme nicht gefunden, das PATH anders ist.


    V_R

    VDR1: POV ION 330 mit Media-Pointer MP-S2 auf yaVDR 0.3.1 - enermay 370 Watt - 80GB SSD + 500GB HD - CoolerMaster ATX-620 - VGA2Scart + HDMI
    VDR2: Zotak ZBOX ID40 auf yaVDR unstable - Sundtek DVB-S2 + remote Sundtek - 60GB SSD - HDMI
    VDR3
    : Zotak ZBOX ID40 auf yaVDR unstable - remote Sundtek - 500GB HD - DVI
    Atom 2700 mit 13W, Ubuntu PP, 60GB SDD + 240GB SSD, 2x Sundtek DVB-S2

    Einmal editiert, zuletzt von v_r ()

  • Hat er angegeben:

    Code
    vdr-knecht1:/etc/skripte# cat convertmpeg4.sh 
    #!/bin/sh
    
    
    set -x

    Habe ich vorhin nur unterschlagen.... ?(


    EDIT: ist ein SymLink

    Code
    vdr-knecht1:/bin# ls -l sh
    lrwxrwxrwx  1 root root 4 2005-03-21 09:59 sh -> bash

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Zitat

    Original von eisenbert
    EDIT: ist ein SymLink

    Code
    vdr-knecht1:/bin# ls -l sh
    lrwxrwxrwx  1 root root 4 2005-03-21 09:59 sh -> bash


    Dann wird es DARAN nicht liegen. War ja auch nur eine Idee :P

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P


  • Wobei "Dir" in diesem Fall der Benutzer Root ist.
    Da sollte dann eine Mail Weiterleitung eingetragen sein.


    --Stefan

    Produktiv: Kubuntu Breezy, Sempron 64 2800+ im 64bit Modus, 1GB, 2x200GB+120GB Seagate, DVB-S: Nexus 2.6 und Nova
    Test: Kubuntu Breezy, AMD64 3200+ im 64bit Modus, 2GB, 250GB Seagate SATA, DVB-S: Nova Plus

  • Ok,
    es ist wohl so, dass das Skript mit Cronjob ausgeführt, nicht alle Befehle ausführt. Die echo-Zeilen werden nur vor&hinter der for-Schleife ausgeführt.... hmm

    Code
    ++ mysql -h <IP> -D <DB> -u <user> -p<pass> -e 'SELECT count(id) FROM aufnahmen WHERE mp4='\''0'\'''
    ++ grep -v count
    + BES=0
    + '[' 0 -eq 0 ']'
    ++ date
    + echo Do Mär 31 11:11:01 CEST '2005 ---> Convert granted <---'
    ++ mysql -h <IP> -D <DB> -u <user> -p<pass> -e 'SELECT id FROM aufnahmen WHERE mpeg='\''1'\'' AND mp4='\''wait'\'''
    ++ grep -v id
    ++ date
    + echo Do Mär 31 11:11:01 CEST '2005 ---> Convert granted Nr.2<---'

    KellerServer | Fractal Cockpit Server + DigiBit Twin SAT>IP Server | Ubuntu22 VM mit vdr 2.6 |

    Einmal editiert, zuletzt von kniepbert ()

  • Setz mal den Pfad explizit auf den Wert von "zu Fuß".


    Edit: ich meine in Deinem Script am Anfang.


    --Stefan

    Produktiv: Kubuntu Breezy, Sempron 64 2800+ im 64bit Modus, 1GB, 2x200GB+120GB Seagate, DVB-S: Nexus 2.6 und Nova
    Test: Kubuntu Breezy, AMD64 3200+ im 64bit Modus, 2GB, 250GB Seagate SATA, DVB-S: Nova Plus

    Einmal editiert, zuletzt von Stefan_T ()

  • Zitat

    Original von eisenbert
    es ist wohl so, dass das Skript mit Cronjob ausgeführt, nicht alle Befehle ausführt. Die echo-Zeilen werden nur vor&hinter der for-Schleife ausgeführt.... hmm


    Hast Du Dir mal das "$i" bzw. den genauen for- Befehl angeschaut? Meine nächste Vermutung geht dahin, daß da etwas mit der Anzahl der " oder ' nicht paßt. Einmal zuwenig auskommentiert und schon klappt der Befehl nicht mehr. Vielleicht ist es besser, diesen Befehl in eine Funktion zu verpacken und damit die Klippen der multiplen ", ', `, ´, \ zu umgehen? Nur so 'ne Idee...

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!