siDDis Skrevet 30. september 2008 Del Skrevet 30. september 2008 Er det noen som kjenner til en sånn implementasjon? Eventuelt vet korleis ein kan få restarta cron når eg har fått lagt endringer til filen? Lenke til kommentar
terjeelde Skrevet 30. september 2008 Del Skrevet 30. september 2008 Er det noen som kjenner til en sånn implementasjon? Eventuelt vet korleis ein kan få restarta cron når eg har fått lagt endringer til filen? Er det ikke mye enklere å: a) Bare ha ett python-script som kjører hele tiden og starter hva du vil, når du vil? eller b) Ha ett Python script som kalles fra cron, sjekker om noe skal kjøre, og så starter det? Da kan du jo ha styring selv, på hvordan vis du vil? Ikke slemt ment, men virker som om du muligens prøver å løse rett problem på feil måte. Kan du si litt mer om hva det er du egentlig skal gjøre? Lenke til kommentar
siDDis Skrevet 30. september 2008 Forfatter Del Skrevet 30. september 2008 Grunnen til dette er at det skal være enkelt å legge til cronjobber via ein webside Lenke til kommentar
terjeelde Skrevet 30. september 2008 Del Skrevet 30. september 2008 Grunnen til dette er at det skal være enkelt å legge til cronjobber via ein webside Men må det være cron da? Script-basert redigering av ellers statiske filer er ofte litt herk. Dersom filen parses inn og redigeres risikerer man konflikt med manuell redigering, dersom man bare skriver filen fra en database overskriver man gjerne andreting osv osv. Tror jeg heller ville latt websiden redigere en database, og så enten hatt en daemon som plukket opp jobber derfra, eller fått crontab til å starte ett program, som kjørte alle jobber som var due, og så quitter. Lenke til kommentar
terjeelde Skrevet 30. september 2008 Del Skrevet 30. september 2008 Tror jeg heller ville latt websiden redigere en database, og så enten hatt en daemon som plukket opp jobber derfra, eller fått crontab til å starte ett program, som kjørte alle jobber som var due, og så quitter. Du liker jo PostgreSQL hvis jeg ikke husker feil... Hva med følgende? Lag en tabell over jobber, som også har den informasjonen du vil om tidspunkt/frekvens etc. Hver gang det gjøres en endring, så trigges en NOTIFY. Da kan du ha en liten daemon, som LISTENer på dette, og re-kalkulerer når neste jobb skal kjøres. Hver gang den enten får en event via LISTEN, eller kjører neste event, så sjekker den nestegang den skal kjøre noe, og sover til da. Lenke til kommentar
siDDis Skrevet 30. september 2008 Forfatter Del Skrevet 30. september 2008 Dette er nok litt meir komplekst samtideg som det skal være enklast mogleg for brukeren. Brukeren skal kunne velge eit python skript som skal utføre diverse handlinger på eit valgt tidspunkt. Dette kan være å sende e-post eller skru av andre maskiner, starte opp maskiner, hente ned data basert på timeplan osv. Brukeren er aldri borti redigering av filer. Dei handlingane som skal skje, skal ikkje alltid skje, timeplanen for handlingane er ikkje meir enn ca 1-2 veker fram i tid. Det er nok mogleg å implementere dette med Python og PostgreSQL, men det må jo være unaudvendig komplekst. Lenke til kommentar
Cucum(r) Skrevet 4. oktober 2008 Del Skrevet 4. oktober 2008 Har du sett på django-cron? Ellers blir nok det enklaste i ditt tilfelle å definere nokre moduler som snakkar med ei SQLite-database eller liknande, for å så linke desse jobbane saman opp mot ein daemon. Eit anna alternativ (som eg hadde gått for) er å bruke Gearman som ein meldingsserver. Du kan da definere funksjoner som serveren skal køyre. Bruk dette i samsvar med ei database som definerer tidsromma dei forskjellige jobbane skal køyre, og du har ei relativt ressursbesparande og god løysing. Å bygge sitt eige køsystem er også eit alternativ. Eg har f.eks. satt opp eit spesielt køsystem med Erlang, memcached og Python, som har moglegheita til å bearbeide 14.000 meldinger i sekunder på ein Intel Quad Core. Men det blir vel kanskje litt overkill for dette prosjektet? Eg vil iallfall anbefale følgjande: Definer modulane dine i klasser. (Baseklasse som definerer funksjonaliteten, alle jobb-klasser har denne som utgangspunkt) Eksponer desse modulane på ein enkel måte for brukarane Lagre brukaralternativa i databasen Ha ein crontab som sjekker kva som er aktuelt å gjere ved visse tidsintervaller Send jobbeskrivelsen til Gearman for bearbeiding Her er eit lite eksempel på baseklassen: import datetime class NotImplemented(Exception): pass class BaseJob(object): """ BaseJob. Jobs must run hourly """ def __init__(self, job_name, hour=15): self.job_name = job_name self.hour = hour def should_run(self): """ If the server hour is the same as the BaseJob's hour, return True """ if datetime.datetime.now().hour == self.hour: return True return False def execute_job(self): raise NotImplemented(), 'Implement in subclass' Så subklasser du berre denne. Eks: class EmailJob(BaseJob): def execute_job(self, email): return send_email('Emne', 'Body', email, '[email protected]') Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå