Ankündigung

Einklappen
Keine Ankündigung bisher.

Cronjob macht was er will?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cronjob macht was er will?

    ... oder was ich nciht will.

    Hallo, ich habe ein kleines Problem mit einem Cronjob auf meinem Server.
    Dieser soll jede Nacht um ein Uhr automatisch eine Änderung in einem SVN-Repo machen und diese dann committen (um genau zu sein soll er in einer entsprechenden Datei die aktuelle Revisionsnummer anpassen und das dann eben hochladen.).

    Dazu habe ich ein kleines PHP-Skript geschrieben:
    PHP-Code:
    <?php
            $path 
    "/var/svn/repos/zousanai/db/current";
            
    $rev = ((int) (file_get_contents($path))+1);
            
    file_put_contents("/var/customers/webs/zousanai/svn/zousanai/core/sysConf/revision.cfg""[globals]\nREVISION=\"$rev\"");
            
    exec("cd /var/customers/webs/zousanai/svn/zousanai/core/sysConf/ && svn commit -m \"Auto commit for revision file!\"");
    Mein crontab sieht folgendermaßen aus:
    Code:
    * 1 * * * /bin/sh /var/cron/repos.sh
    * 1 * * * /usr/bin/php /var/cron/updateRev.php
    Der Cronjob unter repos.sh funktioniert, updateRev.php (um diesen geht es hier) allerdings nicht.

    Er führt den Cronjob schlicht nicht aus.

    Rufe ich ihn von Hand auf
    Code:
    php /var/cron/updateRev.php
    macht er was er soll.

    Nun ist mir gerade auch etwas im SVN-Log aufgefallen:



    Der Aufruf am 05.09.2014 stammt von mir, genauso wie der von heute (12.09.2014)
    Am 07.09.2014 hat er aber scheinbar in kurzen Abständen sieben mal diesen Cron aufgerufen.


    Hat irgendjemand eine Idee was ich falsch mache? Sieht da irgendwer nen Fehler?

    Danke im Voraus...

    LG Kagu

  • #2
    Dein erster "Fehler" ist, für etwas, was du mit Shell sehr gut kannst noch PHP drum zu packen.

    Die paar Zeilen Code sind in reine Shell-Befehle übersetzbar bzw. kannst du sehr gut darüber abwickeln. Eine Zwischenschicht weniger.

    Hast du dir schon einmal das Cron-Log angesehen?
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

    Kommentar


    • #3
      So nebenbei: * 1 * * * ist nicht um 1 Uhr, sondern jede Minute in Stunde 1. Um 1 Uhr ist 0 1 * * *.

      Kommentar


      • #4
        Zitat von ChristianK Beitrag anzeigen
        Dein erster "Fehler" ist, für etwas, was du mit Shell sehr gut kannst noch PHP drum zu packen.

        Die paar Zeilen Code sind in reine Shell-Befehle übersetzbar bzw. kannst du sehr gut darüber abwickeln. Eine Zwischenschicht weniger.

        Hast du dir schon einmal das Cron-Log angesehen?
        Mir ist bewusst dass ich das mit reinen Shell-Befehlen machen kann, allerdings weiß ich nicht wie... Ich bin recht neu auf dem Gebiet, alles was ich mit der Shell nicht hinbekomme mache ich per PHP. So sind es von 9 Skripten dann zwei, welche mit PHP gemacht wurden.

        Cronlog habe ich mir angesehen, die Crons werden ausgeführt. Allerdings tat sich bei letzter Nacht bspw. wieder nichts.

        So nebenbei: * 1 * * * ist nicht um 1 Uhr, sondern jede Minute in Stunde 1. Um 1 Uhr ist 0 1 * * *.
        Danke für den Hinweiß, hab das korrigiert...

        Kommentar


        • #5
          Cronlog habe ich mir angesehen, die Crons werden ausgeführt. Allerdings tat sich bei letzter Nacht bspw. wieder nichts.
          kannst du das etwas konkretissiren?

          Kommentar


          • #6
            Der Cronjob wurde ausgeführt, wie es scheint wurde auch die Revisionsnummer entsprechend hochgezählt (soweit ich das beurteilen kann), allerdings kam der Comit nicht durch.

            Scheinbar geht alles bis auf den letzten Befehl (exec)

            Kommentar


            • #7
              Rechnen mit shell:
              Code:
              read num < input.txt
              expr $num + 1
              Variablen zuweisen mit shell (achte darauf, keine Leerzeichen zwischen "thevar", "=" und "$("):
              Code:
              thevar=$(expr 1 + 1)
              Schreiben in Datei mit shell
              Code:
              echo "something" > zieldatei.txt
              Zusammengesetzt:
              Code:
              read num < input.txt
              newnum=$(expr $num += 1)
              echo "[globals]\nREVISION=$newnum" > /path/to/svn/file/config.cfg
              svn commit -m "Updated rev number"
              Das "cd" etc. rundherum zu basteln überlasse ich jetzt dir

              Btw., mittels "man einbefehl" kannst du ziemlich viel Informationen über Befehle herauskriegen.
              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

              Kommentar


              • #8
                Danke, das mit man kenne ich. Mir hat quasi das lesen aus der Datei und das rechnen gefehlt und wusste net wo ich suchen soll... (oder wie...)
                Ich probier es später mal aus.

                Kommentar


                • #9
                  Zitat von Kagu-chan Beitrag anzeigen
                  Mir hat quasi das lesen aus der Datei und das rechnen gefehlt und wusste net wo ich suchen soll...
                  Im Küchenschrank hinter den Tassen.

                  Google "bash OR shell calculate" 12,4 Millionen Treffer
                  "bash OR shell read file" 112 Millionen Treffer
                  [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                  Kommentar


                  • #10
                    Jo, schon klar. Aber irgendwie war ich zu dumm die Sachen zu ralln... oder unmotiviert, k.a. :/
                    Sorry dafür. Ich hab den Cron dafür jetzt angepasst, allerdings wird er immer noch nicht regelmäßig ausgeführt. Wo kann ich da nach dem Fehler suchen? Im Log finde ich nichts verdächtiges.

                    Kommentar


                    • #11
                      Ich hab den Cron dafür jetzt angepasst, allerdings wird er immer noch nicht regelmäßig ausgeführt.
                      Das mag ich nicht so recht glauben... ich denke, der Cron läuft einwandfrei, aber dein Script baut Mist.
                      Bitte unterscheide solche Dinge, sonst popeln die Helfer in der falschen Nase
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar

                      Lädt...
                      X