<?php namespace YTKNS; if(!defined('YTKNS_SEM_NAME')) define('YTKNS_SEM_NAME', 'b'); if(!defined('YTKNS_SFM_PATH')) define('YTKNS_SFM_PATH', sys_get_temp_dir() . DIRECTORY_SEPARATOR . '{04884071-d334-4388-947a-4fd8c4d4f4ea}'); if(!is_file(YTKNS_SFM_PATH)) touch(YTKNS_SFM_PATH); $ftok = ftok(YTKNS_SFM_PATH, YTKNS_SEM_NAME); $semaphore = sem_get($ftok, 1); if(!sem_acquire($semaphore)) die('Failed to acquire semaphore.' . PHP_EOL); try { require_once __DIR__ . '/startup.php'; // Prevent running cron script during maintenance if(!YTKNS_MAINTENANCE) { // Destroy old sessions $ctx->getUsers()->getSessions()->purgeExpiredSessions(); // Resynchronise use counts Upload::resync(EFFECT_UPLOADS); // Destroy orphaned uploads $ctx->getUploads()->purgeOrphans(); // Get task queue $zones = $ctx->getZones(); $tasks = $zones->getTasks(); $taskQueue = $tasks->queuedTasks(); // Plow through tasks // TODO: make task functions modular foreach($taskQueue as $task) { if(!isset($zoneInfo) || $zoneInfo->getIdStr() !== $task->getZoneId()) $zoneInfo = Zone::byId($task->getZoneId()); switch($task->getName()) { case 'screenshot': $zones->takeScreenshot($zoneInfo); break; } $tasks->deleteTask($task); } } } finally { sem_release($semaphore); }