Rollergirl: Crontab mit PHP aktualisieren

Hallöchen,

ich stehe momentan vor folgendem Problem: Ich habe einen Root-Server und auf diesem Server eine eigene Webanwendung laufen, bei der unter anderem ähnlich wie bei Confixx Cronjobs (im entferntesten Sinne) angelegt werden. Diese Crons werden zu erst mal in einer Datenbank gespeichert und können natürlich auch jeder Zeit beliebig verändert werden. Allerdings nur in der Datenbank.

Jetzt kommt aber der Punkt, ab dem ich momentan auch nicht mehr so richtig weiterkomme: Ich möchte nun aber, dass diese Cronjobs auch in der Crontab des Servers gespeichert und aktulisiert werden, parallel zur Datenbank, damit diese ja auch ausgeführt werden. Nur komme ich momentan leider auf keine Idee, wie man das am besten realisieren kann.

Ich hoffe ich konnte mein Problem verständlich beschreiben ;)

Viele Grüße

Sandy Möller

  1. echo $begrüßung;

    Ich möchte nun aber, dass diese Cronjobs auch in der Crontab des Servers gespeichert und aktulisiert werden, parallel zur Datenbank, damit diese ja auch ausgeführt werden. Nur komme ich momentan leider auf keine Idee, wie man das am besten realisieren kann.

    Wie konfigurierst du denn Cronjobs im Allgemeinen, wenn du einen solchen zu Fuß aktivieren möchtest? Inwiefern hast du Schwierigkeiten diese Vorgehensweise mit PHP nachzubilden?

    echo "$verabschiedung $name";

    1. Wie konfigurierst du denn Cronjobs im Allgemeinen, wenn du einen solchen zu Fuß aktivieren möchtest? Inwiefern hast du Schwierigkeiten diese Vorgehensweise mit PHP nachzubilden?

      Normal trage ich diese via SSH direkt in die Crontab ein. Ich möchte es aber eben so haben, das die immer automatisch aktualisiert und eingetragen werden, sobald ich sie über mein Interface hinzufüge oder ändere.

      Nur wie stelle ich das nun mit PHP an, das mir PHP die Crontab aktualisier oder bestimmte Crons ändert?
      Dazu fällt mir grade keine gute Lösung ein

      1. echo $begrüßung;

        Wie konfigurierst du denn Cronjobs im Allgemeinen, wenn du einen solchen zu Fuß aktivieren möchtest?
        Normal trage ich diese via SSH direkt in die Crontab ein.

        Genau dieses Wie ist es, das du mal genauer beobachten oder formulieren solltest. Mir ist kein anderer Weg bekannt, als das genauso nachzubilden. Es ist gegebenenfalls auch noch abhängig von der konkreten cron-Implementation.

        echo "$verabschiedung $name";

        1. Genau dieses Wie ist es, das du mal genauer beobachten oder formulieren solltest. Mir ist kein anderer Weg bekannt, als das genauso nachzubilden. Es ist gegebenenfalls auch noch abhängig von der konkreten cron-Implementation.

          Also, auf dem Server habe ich die Möglichkeit, die Crontab via SSH als Datei zu öffnen und diese dann wie eine Textdatei zu editieren und den Cronjob manuell einzutragen.

          Also z.B. so:

          * * * * * Aktion die Aufgerufen werden soll
          1 3 * * * usw...

          und wenn ich noch einen mehr haben will, füge ich den ebenfalls so an.

          1. echo $begrüßung;

            Also, auf dem Server habe ich die Möglichkeit, die Crontab via SSH als Datei zu öffnen und diese dann wie eine Textdatei zu editieren und den Cronjob manuell einzutragen.

            Na bitte, Datei öffnen, Inhalt bearbeiten, Datei schließen. Drei ganz normale Vorgänge für PHP. SSH fällt weg, denn du bist ja schon auf der Maschine. Fehlt nur noch ein eventuelles Rechteproblem, denn PHP bzw. der Webserver, in dem das PHP läuft, muss diese Datei bearbeiten dürfen.

            Also z.B. so:
            * * * * * Aktion die Aufgerufen werden soll
            1 3 * * * usw...

            Du weißt also, wie eine hinzuzufügende Zeile aussehen muss. Wenn du eine entfernen möchtest, kannst du sie genauso herstellen, sie mit den vorhandenen Zeilen vergleichen und bei Übereinstimmung daraus entfernen. Bleibt noch ein Problem offen: Nebenläufigkeit. Wenn einer gerade den Inhalt eingelesen hat und bearbeitet, darf ein zweiter Prozess nicht dazwischenfunken. Für eine weitere Bearbeitung muss also die Datei gesperrt werden.

            echo "$verabschiedung $name";

            1. Oh man ja, natürlich... Vielen Dank, genau das mit dem "Vergleichen" der Zeilen war es, was mir einfach nicht mehr einfallen bzw. in den Sinn kommen wollte. So lässt es sich natürlich dann wieder ganz einfach lösen. (Kommt nur noch die Sache mit den Rechten ^^)

              Ich bin wohl einfach überarbeitet momentan ;)

              Dann werde ich das mal so umsetzen.

              Danke nochmals :)

            2. Hi dedlfix,

              Fehlt nur noch ein eventuelles Rechteproblem, denn PHP bzw. der Webserver, in dem das PHP läuft, muss diese Datei bearbeiten dürfen.

              Das ist aber grade der Knackpunkt an der Geschichte, alles andere ist noch „normales” PHP-Programmieren ;-)

              Wenn ich euch recht verstanden habe, redet ihr von /etc/cronjob - die Datei lässt sich normalerweise nur als root beschrieben, und das ist auch gut so. Schließlich kann man dort für jeden Eintrag auch notieren, unter welchem User er ausgeführt werden soll, es wäre also fatal, wenn jemand anderes als root diese Datei manipulieren könnte.

              Den Apache (bzw. das PHP-Script mit mod_suphp o.ä.) als root laufen zu lassen halte ich ebenfalls für eine schlechte Idee, da dies weiteres Gefahrenpotential birgt. Am besten wäre es vielleicht, einen Eintrag in der Crontab zu machen, welcher alle X Minuten ein PHP-Script als root ausführt, welches /etc/crontab modifiziert - erfordert natürlich ein sauber programmiertes PHP-Script.

              Viele Grüße,
                ~ Dennis.

              1. Hi Dennis,

                genau so habe ich es jetzt auch erstmal gelöst. Das ein, über den root aufgerufenes PHP-Script die Crontab anhand einer DB modifiziert.
                Was besseres ist mir bis jetzt auch leider noch nicht eingefallen.

                Gruß

                Sandy Möller

              2. echo $begrüßung;

                Wenn ich euch recht verstanden habe, redet ihr von /etc/cronjob - die Datei lässt sich normalerweise nur als root beschrieben, und das ist auch gut so.

                Die crontab unter /etc meine ich nicht unbedingt. Es gibt je nach cron-Implementation noch die Möglichkeit, userindividuelle crontab-Files zu verwalten.

                echo "$verabschiedung $name";