php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.09.2008, 11:03  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Warum bastelst du dir dann nicht sowas? Du könntest doch die "Spalten" die es beim Crontab gibt als SQL Spalten anlegen, dann kannst du immer in die Spalten das entsprechende eintragen. Also für Minute, Stunde, Tag, Monat, Wochentag. Und dadrin speicherst du dann eben die entsprechenden Werte die du brauchst. Bei der Abfrage kannst du dann exakt die auslesen die du möchtest.
Flor1an ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.09.2008, 11:06  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Warum bastelst du dir dann nicht sowas? Du könntest doch die "Spalten" die es beim Crontab gibt als SQL Spalten anlegen, dann kannst du immer in die Spalten das entsprechende eintragen. Also für Minute, Stunde, Tag, Monat, Wochentag. Und dadrin speicherst du dann eben die entsprechenden Werte die du brauchst. Bei der Abfrage kannst du dann exakt die auslesen die du möchtest.
Das klappt aber nicht mit Montag bis Freitag ('1-6'), oder zu jeder Stunde ('*')
cycap ist offline   Mit Zitat antworten
Alt 24.09.2008, 11:13  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 387
MrNiceGuy befindet sich auf einem aufstrebenden Ast
Standard

Achso, es geht nur um die Abbildung der Crontab auf die DB, nicht um das System, welche Daten da ausgelesen werden sollen...

Also ich habe das so gemacht, dass ein Script jede Minute aufgerufen wird und aus einer Tabelle die entsprechenden Cronjobs sucht, die in dieser Minute wieder "fällig" sind. Spalten:

- UID
- Cronjob
- LastRun
- NextRun
- Status (ACTIVE/INACTIVE)
- Running (TRUE/FALSE)
- Cycle

Wenn der Cronjob auf "ACTIVE" steht, ist er - logischerweise - aktiv und kann ausgeführt werden. Der Punkt "NextRun" gibt an, ob der Zeitpunkt des nächsten Aufrufs bereits erreicht ist ("<=NOW()"). In Cycle habe ich die Anzahl Minuten bis zum nächsten Start stehen und trage dann entsprechend eine Datum-Uhrzeit-Kombi in "NextRun" ein. Damit verhindert wird, dass manche Crons mehrfach gestartet werden, wird der Status "Running" am Anfang des Cronjobs auf TRUE gesetzt und nach Beendigung wieder auf FALSE.
MrNiceGuy ist offline   Mit Zitat antworten
Alt 24.09.2008, 11:17  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

@MrNiceGuy: Die Idee ist zwar ganz schön, aber was wenn du in deinem System jetzt zum Beispiel Mo-Fr 8,10 und 14 Uhr realisieren willst? Verstehst du was ich meine?
cycap ist offline   Mit Zitat antworten
Alt 24.09.2008, 11:21  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

So könnte man es auch machen. Aber wieso sollte es nicht funktionieren wenn du den Crontab direkt abbildest?

Du kannst doch entweder eine Zahl oder ein * speichern. Und dann kannst du eben auslesen:

Code:
SELECT id
FROM crontabs
WHERE
    (m = '20' OR m = '*') AND
    (h = '11' OR h = '*') AND
    (day = '24' OR day = '*') AND
    (month = '9' OR month = '*') AND
    (wday = '3' OR wday = '*')
Die ersten Werte jeweils Variable je nachdem zu welchem Zeitpunkt der Cronjob ausgeführt wird. So kannst du sie genau dann ausführen wenn in dem Feld entweder die richtige Zahl steht, oder wenn * drinnen steht ...

Bei dem Beispiel wäre jetzt der Cronjob am 24.9. um 11:20 ausgeführt werden (Wochentag 3).
Und wenn jetzt ein Cronjob so gespeichert wurde zu jeder Stunde und zur 20ten Minute ausgeführt zu werden dann hast du in der DB den Eintrag:
m = 20
h = *
d = *
month = *
wday = *

Sollte doch funktionieren?
Flor1an ist offline   Mit Zitat antworten
Alt 24.09.2008, 11:23  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

@Flor1an: Und wie willst du das von-bis realisieren?
cycap ist offline   Mit Zitat antworten
Alt 24.09.2008, 11:24  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 387
MrNiceGuy befindet sich auf einem aufstrebenden Ast
Standard

Dann würde ich empfehlen statt des "Cycle" eine zweite Tabelle anzulegen, in der die User ihre Wünsche eintragen können (Wochentag, Stunde, Minute) und dann statt "NOW()+Cycle" (um es vereinfacht auszudrücken) einfach geprüft wird, welches dieser Daten als nächstes zutreffend ist und dieser Zeitpunkt eingetragen wird. Schwierig ist es nicht zu realisieren, da in erster Linie nur geprüft werden muss, welcher Tag heute ist und welcher der nächste Tag von den entsprechenden Möglichkeiten ist. Sollten an diesem Tag dann nicht mehrere Möglichkeiten zur Verfügung stehen, war es das schon mit der Sortierung, ansonsten anhand der Uhrzeit eben noch eine zweite Selektierung vornehmen und fertig!?
MrNiceGuy ist offline   Mit Zitat antworten
Alt 24.09.2008, 15:28  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von cycap Beitrag anzeigen
ch kann bei deinem Vorschlag eben nicht sagen >>Liebe Datenbank, gib mir alle Jobs dir genau jetzt dran sind<<.
doch, guck dir mal die Views von CouchDB an
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline   Mit Zitat antworten
Alt 18.10.2008, 20:10  
Neuer Benutzer
 
Registriert seit: 28.07.2008
Beiträge: 12
Wellenbrecher1963 befindet sich auf einem aufstrebenden Ast
Standard

also ich weiß schon, was Du tun willst. Ich habe in einem speziellen BackOffice ebenfalls etwas ähnliches gemacht.

Ich habe ein PHP Script geschrieben, dass das aktuelle Datum erfasst und in der Datenbank nachsieht, ob ein Kunde Geburtstag hat. Wenn ja bekommt er eine Video eMail als Geburtstagsgruß.

Jedoch brauchst Du kein Script dass abfragt, welche Funktion gerade abgearbeitet werden muss, denn dass macht Cron sowieso schon automatisch - jedenfalls auf einem UNIX / LINUX System. Cron auf einem Windowssystem gibt es glaube ich gar nicht. Oder Mickysoft hat da wieder irgend wo was geklaut und sein Lable draufgeschraubt und als eigenes Gedankengut verkauft. (Siehe die Storry Microsoft gegen Quicktime).

Du musst nur eins bewerkstelligen können: ein Script schreiben, dass eine Datei erstellt / bearbeitet / schreibend erweitert, welches die "Cronjobs" Deiner Kunden in die Datei einträgt, oder in eine Datenbank. Letzteres würde jetzt wieder eine Datei erfordern, welches die Datenbank ausliest und daraus eine Cronjob Datei erstellt.

Tja und nun kommen die dämlichen Dateirechte ins Spiel. Jetzt musst Du einen Weg finden, die Datei in den Cronjob Ordner des Servers zu befördern, oder einen Weg, dass die erstellte Datei in irgend einem Verzeichnis liegen kann und über einen Umweg in eine bestehende Cron Datei importiert wird.

Apache macht das so mit seinen Config Dateien. Wenn ich Subdomains auf meinem Server anlegen muss, schreibe ich die ganzen Anweisungen in eine separate Datei und in der http.conf Datei verwende ich "INCLUDE" oder "IMPORT" Dateiname, um diese gewissen Anweisungen mit verarbeiten zu können.

Jedoch weiß ich nicht, ob das bei Cron funktioniert. Wenn nicht, musst Du den WWW-Daemon das Recht verpassen, in dem Cron Verzeichnis schreiben zu dürfen.

Dann kannst Du z.B. in das Verzeichnis CRON eine Datei abspeichern (irgend ein Dateinamen - es spielt keine Rolle welcher), die von Cron abgearbeitet wird.

Es gilt auch noch zu beachten, dass es verschiedene Möglichkeiten gibt, diese Datei auszuführen:

cron.dayly = täglich
cron.month = monatlich
cron.weekly = wöchentlich
cron.year = jährlich

In diesen Subs werden zwar Uhrzeit beachtet, aber unzureichend das Datum genutzt bzw. man ist an starre Daten gebunden.

Besser kann man im reinen cron Ordner arbeiten, der keine "Punkt Datum" Anweisung im Dateinamen beinhaltet, weil in der jeweiligen Datei die entsprechenden Anweisungen stehen können.

Wie die Anweisungen lauten, solltest Du lieber über googlen rausfinden, mit "cron anweisungen". Da wird dir schon einiges geboten.

Wie man Dateirechte und Gruppenrechte vergibt, sagt Dir auch google, denn da gibt es auch hier viel zu beachten. Man kann hier auch Sonderrechte vergeben. Also, Google ist Dein Freund / Freundin



Tja und nun heißt es probieren, studieren und umsetzen.

Euer Wellenbrecher
Wellenbrecher1963 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Crontab - wget AllOnline PHP Tipps 2008 7 29.05.2008 09:19
Crontab Wget - MySQl Dump AllOnline PHP Tipps 2008 3 28.05.2008 15:09
Crontab funktioniert nicht Plague Server, Hosting und Workstations 10 01.06.2007 13:50
Select / Option Feld mit CSS nachbauen ? andrew22 HTML, Usability und Barrierefreiheit 2 30.11.2006 16:06
glob nachbauen Zergling-new PHP Tipps 2006 9 12.03.2006 23:51
MAILTO in crontab lamp Server, Hosting und Workstations 4 13.01.2006 19:31
Leerzeilen in crontab löschen PHP Tipps 2005-2 0 08.08.2005 17:34
Crontab über Console ohne Editor freq.9 Server, Hosting und Workstations 6 05.05.2005 13:38
newscript nachbauen PHP Tipps 2005 5 19.04.2005 08:47
faq -system von phpbb nachbauen elconde PHP Tipps 2005 5 11.03.2005 14:22
[Erledigt] Crontab Problem Server, Hosting und Workstations 4 27.02.2005 21:08
CronJob testen / mehrere Cronjobs anlegen..?! Server, Hosting und Workstations 1 22.10.2004 08:45
Seltsamer Eintrag in die CronTab MrMarco Server, Hosting und Workstations 4 12.10.2004 13:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cronjob jährlich, crontab berechnen, http://www.php.de/software-design/47617-crontab-nachbauen-2.html, crontab wöchentlich, crontab wday, cron nachbauen, crontab mit php nachbauen, crontab dateirechte, cronjob andere datei rechte, cronjob datei rechte, php crontab bauen, cronjob dateirechte, cron jährlich, dateirechte für crontab, crontab mehrere anweisungen, cron && mehrer anweisungen, cronjob geburtstag, inaktive user automatisch anschreiben php ohne cron, php cronjob geburtstag, abbildung cronjob daten in datenbank

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum