ytkns/cron.php

53 lines
1.5 KiB
PHP

<?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);
}