Crontab fråga

Events happening in the community are now at Drupal community events on www.drupal.org.
markusbroman's picture

Hej.

Jag undrar om det finns någon här som är duktig på att ställa in crontab? I dagsläget körs cron på vår site enligt:
0 * * * *    www-data          cd /usr/share/drupal6 && php cron.php

Nu är det emellertid så att vid cron, utförs videokonvertering av ffmpeg via modulerna FFmpeg Converter och FFmpeg Wrapper. Dessa konverteringar kan ta allt ifrån 1 minut till över en timme. En konvertering körs per cronjob, vilket innebär att om en konvertering bara tar en minut så kommer ingenting konverteras på resterande 59 minuter.

Det går ju förstås att köra cron oftare men detta kan resultera i att konverteringar som redan håller på att utföras avbryts.

Jag försöker alltså hitta på ett sätt att köra cron oftare, säg var 10e minut. Men om cron redan håller på att köras så vill jag inte att en ny skall startas. Går detta att på något sätt bakas in i cron-kommandot? Typ:
*/10 * * * *    www-data         (om cron.php inte körs) cd /usr/share/drupal6 && php cron.php

Jag förstår om min fråga verkar lite knepig:) Men jag är väldigt tacksam om någon har tips.

// Markus

Comments

Om jag inte misstar mig så

peter törnstrand's picture

Om jag inte misstar mig så startar inte Drupal flera CRON-jobb om ett redan pågår?

--
Peter Törnstrand, Happiness

Mjo men

markusbroman's picture

Jag har upplevt att när cron försöker köras när den redan körs så hänger sig cron på något sätt och resulterar i att den inte startar av sig själv nästa gång den ska köras. Detta innebär att man manuellt måste ta bort cron-semaphor och cron-last från databasen innan cron kan köras igen. Jag tror iaf att detta sker pga att cron har försökt köras när den redan håller på.

Det är därför jag försöker få den att inte startas om den redan körs.

// Markus

Drupal sätter en flagga

solipsist's picture

Drupal sätter en flagga (semafor) när cron körs. Du kan alltså inte köra flera Drupal-cronjobb parallellt. Om du vill konvertera video rekommenderar jag att du sätter upp ett separat cronjobb för detta som spawnar nya processer som kan köras parallellt. Du kan sedan ställa in ffmpeg att lägga de färdiga filerna i en katalog Drupal kan läsa, och sedan i Drupal på cron kolla efter färdigkonverterat material och då publicera den nod som video hör till. Ett annat alternativ är att låta en tredjepart göra encoding åt dig. Det finns flera sådana tjänster.

Alternativ lösning

jakeru's picture

Jag har haft samma problem på en webbplats jag byggt och jag kollade lite på alternativa lösningar senast här idag faktiskt. Min idé är att installera http://gearman.org/ och låta den ta hand om längre jobb. Detta har ju dessutom fördelen att jobbet (konvertera film i ert fall) kan sättas igång direkt, t.ex. när denna laddas upp av användaren eller vad det nu är frågan om. Lycka till!

/Jakob Ruhes första inlägg på Drupal Sverige

Bra tips

markusbroman's picture

Verkligen intressant läsning på http://gearman.org/ . Vi löste det dock genom att sätta upp cron på följande sätt:

*/10 * * * *    www-data    pgrep -xf "php cron.php" >/dev/null || { cd /usr/share/drupal6 && php cron.php; }

Vet inte hur snygg denna lösning är men hittills verkar det göra susen. Någon som vet ifall detta sätt att sätta upp cron kan medföra problem?

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: