abcd423417984 Skrevet 29. januar 2009 Del Skrevet 29. januar 2009 (endret) Hei I forbindelse med noe prosessering som gjøres ved at php-scriptet starter en ekstern prosess (vanlig bakgrunns-applikasjon på linux) er jeg litt bekymret for integriteten til denne prosesseringen. Det jeg spesielt er bekymret for er hvis prosessen blir startet mens den allerede kjører. Det går selvfølgelig ann å lage en pid-fil hvor man sjekker hvorvidt denne eksisterer før man starter prosesseringen. Det eneste jeg er litt bekymret for da er hvis 2 personer trykker "start" i nettleseren nøyaltig samtidig, og (grunnet scheduling eller lignende) den "første" starter prosessen men ikke rekker å opprette pid-filen før den andre sjekker hvorvidt denne filen eksisterer (og dermed konkluderer med at prosessen ikke kjører for så å starte den). Noen tanker om hvordan jeg kan forsikre meg om at å starte en prosess og opprette en pid-fil for å tracke denne kan skje i en felles operasjon slik at ikke en parallell sidevisning bryter inn imellom disse? Dette er naturlig nok et klassisk problem som ikke nødvendigvis begrenser seg til php (thread safety etc...), men i dette tilfellet lurer jeg litt rundt hvilke spesielle mekanismer i php jeg kan benytte for å sørge for at man kan låse andre sidevisninger fra å fortsette før første sidevisning har fullført... Noen tanker? Oppdatert: I og med at ingen svarer antar jeg at jeg forklarte problemstillingen dårlig. Her er hva jeg vil skal skje ved parallelle sidevisninger: 1. php-script på visning #1 starter en ny bakgrunnsprosess (linux) 2. php-script på visning #1 dumper pid i en pidfil 3. php-script visning #2 sjekker om pidfil eksisterer 4. php-script visning #2 starter IKKE bakgrunnsprosessen Her er hva jeg er redd skal skje: 1. php-script på visning #1 starter en ny bakgrunnsprosess 2. php-script på visning #2 starter en ny bakgrunnsprosess ettersom visning #1 enda ikke har rukket å lage pidfil 3. php-script på visning #1 lager pidfil 4. php-script på visning #2 lager pidfil Hensikten er å lage et lite "kontrollpanel" for start/stop av batch-prosessering. Endret 30. januar 2009 av invictus Lenke til kommentar
BlueEAGLE Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 (endret) Er det et alternativ at bakgrunnsprosessen kjører hele tiden og at skriptene kun sender data til denne prosessen? Edit: Det eneste problemet som ikke kan løses av å legge på et omslag er å ha for mange omslag. Endret 31. januar 2009 av BlueEAGLE Lenke til kommentar
AlecTBM Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 Ville heller kjørt et shell script som lager pid fila også kjørt et php script. Før du lager PID fil så sjekker du bare ps a om prosessen finnes (ved navn). Hvis den gjør det så avbryter du, hvis ikke så lager du PID Lenke til kommentar
JohndoeMAKT Skrevet 31. januar 2009 Del Skrevet 31. januar 2009 Kan du ikke løse dette ved å lese mutex, skrive mutex og igjen lese mutex og sjekke at det var denne instansen som skrev den? 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å